最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3 el-switch @change事件在初始化時(shí)會(huì)自動(dòng)調(diào)用問(wèn)題處理的多種方法

 更新時(shí)間:2025年07月07日 09:33:28   作者:JaysonJin  
本文介紹Vue3中Switch切換確認(rèn)彈窗的兩種實(shí)現(xiàn)方法:方法一通過(guò)before-change攔截器精準(zhǔn)控制(推薦);方法二用初始化狀態(tài)標(biāo)識(shí)兼容舊項(xiàng)目,并提供統(tǒng)一封裝方案,適用于ElementPlus/NaiveUI等組件,感興趣的朋友一起看看吧

?? Vue3 實(shí)現(xiàn) Switch 狀態(tài)切換確認(rèn)彈窗的兩種方法(含完整代碼)

?? 適用于:Element Plus / Naive UI 等 Switch 開(kāi)關(guān)組件
?? 場(chǎng)景:用戶點(diǎn)擊開(kāi)關(guān)前先彈出確認(rèn)彈窗,防止誤操作

? 方法一:使用before-change攔截器(推薦)

? 原理說(shuō)明:

  • 使用 Switch 組件的 before-change 屬性攔截切換
  • 返回 false 阻止?fàn)顟B(tài)變更
  • 彈出確認(rèn)框后再手動(dòng)執(zhí)行狀態(tài)修改 API

?? 示例代碼:

<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; // 阻止切換
  }
};

?? 注意事項(xiàng):

  • before-change 要求返回 boolean | Promise<boolean>
  • 如果 Promise 被 reject 或返回 false,則阻止?fàn)顟B(tài)切換
  • 適合 Element Plus、Naive UI、TDesign 等支持此屬性的組件

? 方法二:利用“初始化狀態(tài)”標(biāo)識(shí)判斷(兼容性方案)

? 原理說(shuō)明:

  • 初始化階段不執(zhí)行彈窗
  • 后續(xù)用戶手動(dòng)點(diǎn)擊再執(zhí)行確認(rèn)邏輯
  • 用于不支持 before-change 的組件或舊項(xiàng)目兼容

?? 示例代碼:

<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(() => {
      // 用戶取消后回滾狀態(tài)
      row.status = row.status === "0" ? "1" : "0";
    });
};

?? 注意事項(xiàng):

  • isInit 適合用于組件首次渲染跳過(guò)
  • 缺點(diǎn)是狀態(tài)回滾不如 before-change 精準(zhǔn),需手動(dòng)回改值

? 總結(jié)對(duì)比

方法優(yōu)點(diǎn)缺點(diǎn)場(chǎng)景
? 方法一:before-change原生支持、邏輯清晰、控制精準(zhǔn)需組件支持Vue3 + Element Plus/Naive UI 推薦
方法二:狀態(tài)標(biāo)識(shí)控制無(wú)需組件支持、兼容性好狀態(tài)回滾需手動(dòng)處理,首次需跳過(guò)舊項(xiàng)目、無(wú) before-change 的組件

?? Bonus:統(tǒng)一封裝 Switch 彈窗邏輯

可封裝為一個(gè)公共方法,在多個(gè)組件中復(fù)用:

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;
  }
};

到此這篇關(guān)于Vue3 el-switch @change事件在初始化時(shí)會(huì)自動(dòng)調(diào)用問(wèn)題處理的幾種方法的文章就介紹到這了,更多相關(guān)Vue3 el-switch @change事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解IOS微信上Vue單頁(yè)面應(yīng)用JSSDK簽名失敗解決方案

    詳解IOS微信上Vue單頁(yè)面應(yīng)用JSSDK簽名失敗解決方案

    這篇文章主要介紹了詳解IOS微信上Vue單頁(yè)面應(yīng)用JSSDK簽名失敗解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • vue通過(guò)子組件修改父組件prop的多種實(shí)現(xiàn)方式

    vue通過(guò)子組件修改父組件prop的多種實(shí)現(xiàn)方式

    這篇文章主要介紹了vue通過(guò)子組件修改父組件prop的幾種實(shí)現(xiàn)方式,比較常用的方式是通過(guò)Prop單向傳遞的規(guī)則,需要的朋友可以參考下
    2021-09-09
  • Vue3中Hooks函數(shù)的使用及封裝思想詳解

    Vue3中Hooks函數(shù)的使用及封裝思想詳解

    Vue?3中的Hooks函數(shù)是一種用于在組件中共享可復(fù)用邏輯的方式,簡(jiǎn)單來(lái)說(shuō),就是將單獨(dú)功能的js代碼抽離出來(lái),?加工成公共函數(shù),從而達(dá)到邏輯復(fù)用,下面小編就來(lái)和大家聊聊Hooks函數(shù)的使用及封裝思想吧
    2023-06-06
  • vue3項(xiàng)目如何國(guó)際化實(shí)戰(zhàn)指南

    vue3項(xiàng)目如何國(guó)際化實(shí)戰(zhàn)指南

    像很多大型的網(wǎng)址,特別是跨國(guó)際等公司網(wǎng)頁(yè),訪問(wèn)來(lái)自世界各地用戶,所以網(wǎng)頁(yè)的國(guó)際化極其重要的需求,下面這篇文章主要給大家介紹了關(guān)于vue3項(xiàng)目如何國(guó)際化的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 基于Vue3+ts封裝一個(gè)簡(jiǎn)單版的Message組件

    基于Vue3+ts封裝一個(gè)簡(jiǎn)單版的Message組件

    近日項(xiàng)目中需要使用信息提示框的功能,ui組件庫(kù)使用的是字節(jié)的arco-design-vue,看了一下,現(xiàn)有的Message不滿足要是需求,直接使用message組件的話,改樣式太麻煩,所以本文就本就介紹了基于Vue3+ts封裝一個(gè)簡(jiǎn)單版的Message組件,需要的朋友可以參考下
    2023-09-09
  • Vue3中10多種組件通訊方法小結(jié)

    Vue3中10多種組件通訊方法小結(jié)

    本文主要介紹了Vue3中10多種組件通訊方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 解決vue3中內(nèi)存泄漏的問(wèn)題

    解決vue3中內(nèi)存泄漏的問(wèn)題

    在項(xiàng)目中會(huì)發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象,當(dāng)我們?cè)谑褂胑lement-plus中的圖標(biāo)組件時(shí)會(huì)出現(xiàn)內(nèi)存泄漏,所以本文講給大家講講如何解決vue3中的內(nèi)存泄漏的問(wèn)題,需要的朋友可以參考下
    2023-07-07
  • Vue自定義彈窗指令的實(shí)現(xiàn)代碼

    Vue自定義彈窗指令的實(shí)現(xiàn)代碼

    使用vue2.0實(shí)現(xiàn)自定義彈窗指令,當(dāng)標(biāo)簽有該指令時(shí),點(diǎn)擊標(biāo)簽可以彈出彈窗。下面通過(guò)實(shí)例代碼給大家介紹Vue自定義彈窗指令的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2018-08-08
  • 關(guān)于Vite項(xiàng)目打包后瀏覽器兼容性問(wèn)題的解決方案

    關(guān)于Vite項(xiàng)目打包后瀏覽器兼容性問(wèn)題的解決方案

    本文主要介紹了關(guān)于Vite項(xiàng)目打包后瀏覽器兼容性問(wèn)題的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Nuxt頁(yè)面級(jí)緩存的實(shí)現(xiàn)

    Nuxt頁(yè)面級(jí)緩存的實(shí)現(xiàn)

    這篇文章主要介紹了Nuxt頁(yè)面級(jí)緩存的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評(píng)論

通渭县| 清苑县| 新化县| 靖边县| 延边| 昌都县| 平远县| 临夏市| 大名县| 阿城市| 神木县| 红安县| 茌平县| 当涂县| 巢湖市| 南投市| 兴隆县| 华蓥市| 阳谷县| 双城市| 南溪县| 临江市| 德江县| 玉林市| 资溪县| 白河县| 海伦市| 叙永县| 喀喇| 横峰县| 拉萨市| 遂平县| 宁河县| 通海县| 驻马店市| 高平市| 扎鲁特旗| 绍兴县| 泌阳县| 那坡县| 靖远县|