Vue3 el-switch @change事件在初始化時(shí)會(huì)自動(dòng)調(diào)用問(wèn)題處理的多種方法
?? 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)文章
vue項(xiàng)目中如何配置env環(huán)境的實(shí)現(xiàn)
本文主要介紹了vue項(xiàng)目中如何配置env環(huán)境的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Vue2.x如何解決Element組件el-tooltip滾動(dòng)時(shí)錯(cuò)位不消失的問(wèn)題
這篇文章主要介紹了Vue2.x如何解決Element組件el-tooltip滾動(dòng)時(shí)錯(cuò)位不消失的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Vue3時(shí)間軸組件問(wèn)題記錄(時(shí)間信息收集組件)
本文介紹了如何在Vue3項(xiàng)目中封裝一個(gè)時(shí)間信息收集組件,采用雙向綁定響應(yīng)式數(shù)據(jù),通過(guò)對(duì)Element-Plus的Slider組件二次封裝,實(shí)現(xiàn)時(shí)間軸功能,解決了小數(shù)計(jì)算導(dǎo)致匹配問(wèn)題和v-model綁定組件無(wú)效問(wèn)題,感興趣的朋友跟隨小編一起看看吧2024-09-09
vuecli項(xiàng)目構(gòu)建SSR服務(wù)端渲染的實(shí)現(xiàn)
這篇文章主要介紹了vuecli項(xiàng)目構(gòu)建SSR服務(wù)端渲染的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
詳解Vue webapp項(xiàng)目通過(guò)HBulider打包原生APP
這篇文章主要介紹了詳解Vue webapp項(xiàng)目通過(guò)HBulider打包原生APP,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
vue中實(shí)現(xiàn)支持txt,docx,xlsx,mp4格式文件預(yù)覽功能(純前端)
對(duì)于Vue你可以實(shí)現(xiàn)文件的預(yù)覽功能,這篇文章主要給大家介紹了關(guān)于vue中實(shí)現(xiàn)支持txt,docx,xlsx,mp4格式文件預(yù)覽功能的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
Vue + Element UI 實(shí)現(xiàn)權(quán)限管理系統(tǒng)之菜單功能實(shí)現(xiàn)代碼
菜單管理是一個(gè)對(duì)菜單樹(shù)結(jié)構(gòu)的增刪改查操作,這篇文章主要介紹了Vue + Element UI 實(shí)現(xiàn)權(quán)限管理系統(tǒng)之菜單功能實(shí)現(xiàn)代碼,需要的朋友可以參考下2022-02-02
vue利用vue meta info設(shè)置每個(gè)頁(yè)面的title與meta信息
這篇文章主要給大家介紹了關(guān)于vue如何利用vue meta info設(shè)置每個(gè)頁(yè)面的title與meta信息的相關(guān)資料,文中將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-10-10
vue項(xiàng)目如何讓局域網(wǎng)ip訪問(wèn)配置設(shè)置
這篇文章主要介紹了vue項(xiàng)目如何讓局域網(wǎng)ip訪問(wèn)配置設(shè)置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-09-09

