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

Vue3 + Element Plus 改寫 ElMessageBox實現(xiàn)自定義按鈕效果

 更新時間:2026年03月02日 10:59:59   作者:山核桃&17°  
本文基于Vue3和ElementPlus,改寫了ElMessageBox組件,實現(xiàn)了一個任務處理確認彈窗,提供「取消」「處理當前任務(ONE)」「處理全部任務(ALL)」三種操作,適配異步接口調(diào)用,可直接復制到Vue3項目中復用,感興趣的朋友跟隨小編一起看看吧

一、概述

本文是基于 Vue3 + Element Plus,對 ElMessageBox 組件進行改寫實現(xiàn)的任務處理確認彈窗方法。核心功能是觸發(fā)彈窗,提供「取消」「處理當前任務(ONE)」「處理全部任務(ALL)」三種操作,適配異步接口調(diào)用,可直接復制到 Vue3 項目中復用,無需額外開發(fā)基礎交互,解決 Vue2 向 Vue3 遷移時 ElMessageBox 的適配問題。

二、技術棧與前置要求

2.1 技術棧

  • Vue3:支持 Composition API、<script setup>語法、async/await 異步操作,適配 Vue3 虛擬 DOM 渲染機制;
  • Element Plus:依賴 ElMessageBox(彈窗核心組件)、ElButton(操作按鈕)、ElIcon(圖標容器)及 Warning 圖標組件;
  • Vue3 渲染函數(shù)(h 函數(shù)):用于動態(tài)構建彈窗自定義內(nèi)容,替代 Vue2 模板寫法,適配 Vue3 組件渲染邏輯;
  • 異步接口:依賴 todoApi 接口函數(shù)(需返回 Promise),用于提交任務處理請求,完成單個/全部任務的處理邏輯。

2.2 前置要求

  • 項目已集成 Vue3(推薦 3.2+版本),支持 ES6+語法及 async/await 異步操作;
  • Element Plus 已全局注冊或按需導入(需確保 ElMessageBox、ElButton、ElIcon、Warning 圖標已導入并注冊);
  • 已實現(xiàn) todoApi 接口,支持接收「任務 ID」和「處理類型」兩個參數(shù),返回 Promise 對象;
  • 兼容現(xiàn)代瀏覽器(Chrome、Firefox、Edge 等),支持 Vue3 虛擬 DOM 渲染及 Element Plus 組件渲染;
  • 若使用<script setup>語法,需確保 Vue3 版本支持該語法(3.2+),無需額外 return 即可暴露方法。

三、完整改寫代碼

以下為 onToDo 方法完整改寫代碼(Vue3 + Element Plus 適配),可直接復制到 Vue3 組件中使用,無需額外修改(僅需適配項目接口地址):

// 按需導入(未全局注冊Element Plus時需添加,全局注冊可省略)
// import { ElMessageBox, ElButton, ElIcon } from 'element-plus'
// import { Warning } from '@element-plus/icons-vue'
// import { todoApi } from '@/api/task' // 導入項目實際任務處理接口
/**
 * onToDo 方法(Vue3 + Element Plus ElMessageBox 改寫版)
 * 核心功能:觸發(fā)任務處理確認彈窗,提供取消、處理單個任務、處理全部任務三種操作
 * @param {String/Number} id - 當前任務唯一標識(用于接口區(qū)分具體任務)
 */
const onToDo = (id) => {
  // 調(diào)用Element Plus ElMessageBox彈窗,改寫適配Vue3渲染邏輯
  ElMessageBox({
    title: "提示", // 彈窗標題
    // 彈窗內(nèi)容:通過h函數(shù)動態(tài)構建(替代Vue2模板,適配Vue3)
    message: h("div", null, [
      // 警告圖標(Element Plus規(guī)范:需用ElIcon組件包裹具體圖標,區(qū)別于Vue2的class調(diào)用)
      h(
        ElIcon,
        {
          style:
            "color:#FCBE2D; font-size: 18px !important; margin-right: 10px; display: inline-block;",
        },
        () => h(Warning)
      ),
      // 彈窗提示文本,明確操作選項
      h(
        "span",
        { style: "vertical-align: middle;" },
        "處理當前任務(ONE),處理全部任務(ALL)和取消?"
      ),
      // 自定義操作按鈕容器(右對齊,調(diào)整與文本的間距)
      h(
        "div",
        {
          style:
            "display: flex; justify-content: flex-end; margin-top: 10px; margin-bottom: -10px;",
        },
        [
          // 取消按鈕:僅關閉彈窗,不執(zhí)行任何業(yè)務邏輯
          h(
            ElButton,
            {
              onClick: () => ElMessageBox.close(),
            },
            "取消"
          ),
          // ONE按鈕:處理當前單個任務,異步調(diào)用接口后關閉彈窗
          h(
            ElButton,
            {
              onClick: async () => {
                await todoApi(id, "ONE"); // 調(diào)用接口,傳入當前任務ID和處理類型ONE
                ElMessageBox.close(); // 接口調(diào)用完成后,關閉彈窗
              },
            },
            "ONE"
          ),
          // ALL按鈕:處理與當前任務相關的全部任務,異步調(diào)用接口后關閉彈窗
          h(
            ElButton,
            {
              onClick: async () => {
                await todoApi(id, "ALL"); // 調(diào)用接口,傳入當前任務ID和處理類型ALL
                ElMessageBox.close(); // 接口調(diào)用完成后,關閉彈窗
              },
            },
            "ALL"
          ),
        ]
      ),
    ]),
    showCancelButton: false, // 關閉Element Plus默認取消按鈕(使用自定義取消按鈕)
    showConfirmButton: false, // 關閉Element Plus默認確認按鈕(使用自定義操作按鈕)
    callback: () => {}, // 必傳空回調(diào),避免Element Plus拋出異常,確保彈窗正常顯示
  });
};

四、核心說明

4.1 方法參數(shù)

參數(shù)名類型說明示例
idString / Number當前觸發(fā)任務的唯一標識,傳入todoApi接口,用于后端區(qū)分具體需要處理的任務“task_123”、456

4.2 彈窗核心配置(改寫重點)

  • message:通過 Vue3 h 函數(shù)動態(tài)構建彈窗內(nèi)容,替代 Vue2 的模板寫法,適配 Vue3 虛擬 DOM 渲染機制,可靈活組合圖標、文本、按鈕;
  • 圖標渲染:Element Plus 與 Vue2 Element UI 的核心區(qū)別之一,需用 ElIcon 組件包裹 Warning 圖標,不可直接使用 class 類名調(diào)用圖標;
  • 自定義按鈕:關閉 Element Plus 默認的確認/取消按鈕,通過 h 函數(shù)構建三個自定義操作按鈕,分別綁定取消、處理單個、處理全部的邏輯;
  • callback:必傳空回調(diào)函數(shù),Element Plus 的 ElMessageBox 組件在 Vue3 環(huán)境下,若不傳入 callback 會拋出異常,導致彈窗無法正常顯示,空回調(diào)不影響任何業(yè)務邏輯。

4.3 按鈕操作邏輯

  • 取消:僅調(diào)用 ElMessageBox.close() 方法關閉彈窗,不執(zhí)行任何接口調(diào)用,不影響當前任務狀態(tài);
  • ONE:異步調(diào)用 todoApi(id, 'ONE'),僅處理當前傳入 id 對應的單個任務,接口調(diào)用成功(或完成)后,關閉彈窗;
  • ALL:異步調(diào)用 todoApi(id, 'ALL'),處理與當前傳入 id 任務相關的全部任務(具體關聯(lián)邏輯由后端接口實現(xiàn)),接口完成后關閉彈窗。

五、使用方法

5.1 方法調(diào)用

在 Vue3 組件中(支持<script setup>或 Options API 兩種寫法),通過點擊事件調(diào)用 onToDo 方法,傳入任務 id 即可觸發(fā)彈窗:

// 示例1:<script setup>語法(Vue3.2+ 推薦,簡潔高效)
// 按需導入所需組件和接口(全局注冊可省略導入)
import { ElMessageBox, ElButton, ElIcon } from "element-plus";
import { Warning } from "@element-plus/icons-vue";
import { todoApi } from "@/api/task";
// 定義onToDo方法(完整代碼同上)
const onToDo = (id) => {
  /* 方法實現(xiàn) */
};
// 表格操作列調(diào)用(最常用場景)
// <el-table :data="taskList">
//   <el-table-column label="操作" align="center">
//     <template #default="scope">
//       <el-button type="primary" @click="onToDo(scope.row.id)">處理任務</el-button>
//     </template>
//   </el-table-column>
// </el-table>
// 示例2:Options API(兼容舊寫法,適配Vue3)
export default {
  methods: {
    // 定義onToDo方法(完整代碼同上)
    onToDo(id) {
      /* 方法實現(xiàn) */
    },
    // 其他方法中調(diào)用
    handleTaskClick(id) {
      // 可添加前置業(yè)務邏輯(如任務狀態(tài)判斷)
      this.onToDo(id); // 調(diào)用彈窗方法
    },
  },
};

五、注意事項(改寫重點)

  • 組件導入:未全局注冊 Element Plus 時,必須按需導入 ElMessageBox、ElButton、ElIcon 及 Warning 圖標,否則組件無法渲染,彈窗無法顯示;
  • 圖標渲染:嚴格遵循 Element Plus 規(guī)范,用 ElIcon 包裹 Warning 圖標,否則圖標無法正常顯示(這是 Vue3 改寫與 Vue2 寫法的核心區(qū)別);
  • 異步操作:ONE/ALL 按鈕的接口調(diào)用必須添加 async/await,確保接口調(diào)用完成后再關閉彈窗,避免出現(xiàn)“彈窗已關閉但接口未完成”的異常;
  • 空回調(diào):必須傳入 callback: () => {} 空回調(diào),否則 Element Plus 會拋出異常,導致彈窗無法正常渲染;
  • 樣式調(diào)整:可通過修改 h 函數(shù)中的 style 屬性,調(diào)整彈窗文本、圖標、按鈕的顏色、尺寸、間距,適配項目 UI 風格;
  • 參數(shù)校驗:調(diào)用 onToDo 方法時,必須傳入有效的任務 id(唯一標識),否則接口無法區(qū)分任務,導致處理異常;
  • 語法兼容:確保 Vue3 項目支持 ES6+語法,async/await 需在支持 Promise 的環(huán)境下使用,避免語法報錯;
  • 接口異常:可在 async/await 中添加 try/catch 捕獲接口異常,優(yōu)化用戶體驗(如彈窗提示接口失敗,不關閉彈窗)。

六、常見問題

  • 彈窗不顯示:優(yōu)先檢查 Element Plus 組件是否導入、callback 是否傳入空回調(diào)、h 函數(shù)語法是否正確(如組件名稱大小寫、參數(shù)格式);
  • 圖標不顯示:檢查 ElIcon 和 Warning 圖標是否導入,是否用 ElIcon 組件包裹 Warning,避免直接使用 class 類名調(diào)用;
  • 按鈕無反應:檢查 todoApi 接口是否導入、接口調(diào)用是否添加 async/await、按鈕 onClick 事件是否正確綁定;
  • 控制臺報錯:優(yōu)先檢查 callback 是否為空回調(diào)、組件導入是否完整、h 函數(shù)中組件名稱是否正確(如 ElButton 首字母大寫);
  • 接口調(diào)用失?。簷z查接口地址是否正確、參數(shù)傳遞是否與后端一致(如 taskId、handleType 字段名稱)、請求方式是否匹配;
  • <script setup>中方法無法調(diào)用:確保方法直接定義,無需額外 return,組件和接口導入正確。

到此這篇關于Vue3 + Element Plus 改寫 ElMessageBox實現(xiàn)自定義按鈕效果的文章就介紹到這了,更多相關vue element plus改寫ElMessageBox自定義按鈕內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Element的穿梭框數(shù)據(jù)量大時點擊全選卡頓的解決方案

    Element的穿梭框數(shù)據(jù)量大時點擊全選卡頓的解決方案

    本文主要介紹了Element的穿梭框數(shù)據(jù)量大時點擊全選卡頓的解決方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Vue中$on和$emit的實現(xiàn)原理分析

    Vue中$on和$emit的實現(xiàn)原理分析

    這篇文章主要介紹了Vue中$on和$emit的實現(xiàn)原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue3響應式對象的api超全實例詳解

    vue3響應式對象的api超全實例詳解

    可以把數(shù)據(jù)變成響應式api的方法叫做響應式api,下面這篇文章主要給大家介紹了關于vue3響應式對象api的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Vue中引入bootstrap.min.css的正確姿勢分享

    Vue中引入bootstrap.min.css的正確姿勢分享

    這篇文章主要介紹了Vue中引入bootstrap.min.css的正確姿勢,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue3中如何使用dayjs

    vue3中如何使用dayjs

    這篇文章主要介紹了vue3中如何使用dayjs問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue2中使用自定義指令實現(xiàn)el-table虛擬列表的代碼示例

    Vue2中使用自定義指令實現(xiàn)el-table虛擬列表的代碼示例

    在實際開發(fā)中,我們可能會面臨其他需求,例如在 el-table 中無法使用分頁技術的情況下展示海量數(shù)據(jù),這種情況下,頁面可能會出現(xiàn)卡頓,嚴重時甚至可能引發(fā)瀏覽器崩潰,所以針對這個問題本文給大家介紹了vue2中使用自定義指令實現(xiàn)el-table虛擬列表,需要的朋友可以參考下
    2025-01-01
  • vue 子組件向父組件傳值方法

    vue 子組件向父組件傳值方法

    下面小編就為大家分享一篇vue 子組件向父組件傳值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue路由傳參 router-link和編程式傳參方式

    vue路由傳參 router-link和編程式傳參方式

    這篇文章主要介紹了vue路由傳參 router-link和編程式傳參方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue生產(chǎn)環(huán)境如何自動屏蔽console

    Vue生產(chǎn)環(huán)境如何自動屏蔽console

    這篇文章主要介紹了Vue生產(chǎn)環(huán)境如何自動屏蔽console問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Vue渲染流程步驟詳解

    Vue渲染流程步驟詳解

    在Vue里渲染一塊內(nèi)容,會有四個流程步驟,那么該怎么理解這個流程呢,所以本文就給大家詳細講解一下Vue 渲染流程,文中有纖細的代碼示例供大家參考,需要的朋友可以參考下
    2023-07-07

最新評論

平果县| 邹平县| 宝鸡市| 化德县| 濮阳县| 文成县| 江油市| 扎鲁特旗| 延长县| 德阳市| 宝兴县| 永善县| 马尔康县| 万州区| 郑州市| 寿阳县| 平陆县| 拉萨市| 莆田市| 响水县| 蒙自县| 宣城市| 深泽县| 南雄市| 洛浦县| 苏尼特右旗| 桐庐县| 拉萨市| 崇文区| 牙克石市| 石首市| 白银市| 巫山县| 施甸县| 乌鲁木齐县| 盐山县| 长武县| 昭苏县| 开原市| 平泉县| 张家口市|