vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue3 el-switch @change事件

Vue3 el-switch @change事件在初始化时会自动调用问题处理的多种方法

作者:JaysonJin

本文介绍Vue3中Switch切换确认弹窗的两种实现方法:方法一通过before-change拦截器精准控制(推荐);方法二用初始化状态标识兼容旧项目,并提供统一封装方案,适用于ElementPlus/NaiveUI等组件,感兴趣的朋友一起看看吧

💡 Vue3 实现 Switch 状态切换确认弹窗的两种方法(含完整代码)

🔧 适用于:Element Plus / Naive UI 等 Switch 开关组件
📌 场景:用户点击开关前先弹出确认弹窗,防止误操作

✨ 方法一:使用before-change拦截器(推荐)

✅ 原理说明:

📦 示例代码:

<el-switch
  v-model="item.status"
  :active-value="'1'"
  :inactive-value="'0'"
  :before-change="() => handleBeforeChange(item)"
/>
const handleBeforeChange = async (row: any) => {
  const text = row.status === "0" ? "启用" : "停用";
  try {
    await proxy.$modal.confirm(`确定要${text}“${row.userName}”用户吗?`);
    await changeUserStatus(row.userId, row.status);
    proxy.$modal.msgSuccess(`${text}成功`);
    return true;
  } catch (err) {
    return false; // 阻止切换
  }
};

📘 注意事项:

⚙ 方法二:利用“初始化状态”标识判断(兼容性方案)

✅ 原理说明:

📦 示例代码:

<el-switch
  v-model="item.status"
  :active-value="'1'"
  :inactive-value="'0'"
  @change="() => handleStatusChange(item)"
/>
let isInit = true;
const handleStatusChange = (row: any) => {
  if (isInit) {
    isInit = false;
    return;
  }
  const text = row.status === "0" ? "启用" : "停用";
  proxy.$modal.confirm(`确定要${text}“${row.userName}”用户吗?`)
    .then(() => {
      return changeUserStatus(row.userId, row.status);
    })
    .then(() => {
      proxy.$modal.msgSuccess(`${text}成功`);
    })
    .catch(() => {
      // 用户取消后回滚状态
      row.status = row.status === "0" ? "1" : "0";
    });
};

📘 注意事项:

✅ 总结对比

方法优点缺点场景
✅ 方法一:before-change原生支持、逻辑清晰、控制精准需组件支持Vue3 + Element Plus/Naive UI 推荐
方法二:状态标识控制无需组件支持、兼容性好状态回滚需手动处理,首次需跳过旧项目、无 before-change 的组件

🧪 Bonus:统一封装 Switch 弹窗逻辑

可封装为一个公共方法,在多个组件中复用:

export const confirmSwitch = async (row, title, doChange: () => Promise<any>) => {
  try {
    await proxy.$modal.confirm(title);
    await doChange();
    proxy.$modal.msgSuccess("操作成功");
    return true;
  } catch (e) {
    return false;
  }
};

到此这篇关于Vue3 el-switch @change事件在初始化时会自动调用问题处理的几种方法的文章就介绍到这了,更多相关Vue3 el-switch @change事件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文