You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue中将变量从deleteUser方法传递到onConfirm方法?

如何将deleteUser中的user变量传递到onConfirm方法

问题背景

原本用原生confirm弹窗的删除逻辑能正常运行,现在要切换为toast组件实现更友好的确认界面,需把操作拆成onConfirm和onReject方法,但不知道怎么把deleteUser里的user变量传递给onConfirm。

旧代码(可正常运行)

deleteUser(user) {
  if (confirm("Are you sure you want to delete: " + user.name + "?")) {
    this.working = true;
    axios.delete('/teachers/' + user.id)
      .then(this.onTeacherDeleted(user)) // 注:此处存在逻辑问题,会立即执行onTeacherDeleted,而非请求成功后执行
  }
  // this.$toast.add({severity: 'warn', summary: 'Are you sure?', detail: 'Are you sure you want to delete this placement?', group: 'bc'});
},

onTeacherDeleted(user) {
  this.$toast.add({
    severity:'success', 
    summary: user.name + 'Deleted Successfully', 
    detail:'The teacher was successfully delted from the database', 
    life: 3000
  });
  window.location.reload()
}

新代码当前问题

deleteUser触发toast后,onConfirm拿不到要删除的user变量,且按钮点击事件未正确传递参数,同时axios回调仍存在立即执行的问题。

deleteUser(user) {
  this.$toast.add({
    severity: 'warn', 
    summary: 'Are you sure?', 
    detail: 'Are you sure you want to delete this placement?', 
    group: 'bc'
  });
},

onConfirm(user) {
  this.$toast.removeGroup('bc');
  this.working = true;
  axios.delete('/teachers/' + user.id)
    .then(this.onTeacherDeleted(user)) // 同样存在立即执行的问题
},

onReject() {
  this.$toast.removeGroup('bc');
}
<button class="btn border border-success rounded-3" type="button" @click="onConfirm" this.onTeacherDeleted(user) aria-expanded="false">
<button class="btn border border-danger rounded-3" type="button" @click="onReject" aria-expanded="false">

解决方案

通过组件实例存储当前要删除的用户,确保onConfirm能获取到变量,同时修复axios回调的执行时机问题:

  1. 在组件data中添加存储变量
data() {
  return {
    // 其他原有变量...
    currentDeleteUser: null // 用于临时存储当前要删除的用户
  }
}
  1. 修改deleteUser方法,保存用户到实例变量
deleteUser(user) {
  this.currentDeleteUser = user; // 把要删除的用户存到实例变量中
  this.$toast.add({
    severity: 'warn',
    summary: '确认删除?',
    detail: `确定要删除用户 ${user.name} 吗?`, // 显示用户名更直观
    group: 'bc'
  });
}
  1. 修改onConfirm方法,使用实例存储的用户
onConfirm() {
  const user = this.currentDeleteUser;
  if (!user) return; // 防止无用户时误操作
  
  this.$toast.removeGroup('bc');
  this.working = true;
  axios.delete(`/teachers/${user.id}`)
    .then(() => this.onTeacherDeleted(user)); // 用箭头函数确保回调在请求成功后执行,同时保留this指向和user变量
}
  1. 修正按钮代码,移除无效内容
<button class="btn border border-success rounded-3" type="button" @click="onConfirm" aria-expanded="false">确认删除</button>
<button class="btn border border-danger rounded-3" type="button" @click="onReject" aria-expanded="false">取消</button>
  1. 优化onTeacherDeleted方法(可选)
onTeacherDeleted(user) {
  this.$toast.add({
    severity:'success',
    summary: `${user.name} 删除成功`,
    detail: '该用户已成功从数据库移除',
    life: 3000
  });
  // 推荐用Vue响应式更新列表,而非强制刷新页面
  // 例如:this.teachers = this.teachers.filter(item => item.id!== user.id);
  window.location.reload();
}

内容的提问来源于stack exchange,提问作者Jac Phillipps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:55:16