<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Vue.js彈出模態框組件開發的示例代碼

        來源:懂視網 責編:小采 時間:2020-11-27 22:33:58
        文檔

        Vue.js彈出模態框組件開發的示例代碼

        Vue.js彈出模態框組件開發的示例代碼:前言 在開發項目的過程中,經常會需要開發一些彈出框效果,但原生的alert和confirm往往都無法滿足項目的要求。這次在開發基于Vue.js的讀書WebApp的時候總共有兩處需要進行提示的地方,因為一開始就沒有引入其他的組件庫,現在只好自己寫一個模態框組件了。目
        推薦度:
        導讀Vue.js彈出模態框組件開發的示例代碼:前言 在開發項目的過程中,經常會需要開發一些彈出框效果,但原生的alert和confirm往往都無法滿足項目的要求。這次在開發基于Vue.js的讀書WebApp的時候總共有兩處需要進行提示的地方,因為一開始就沒有引入其他的組件庫,現在只好自己寫一個模態框組件了。目

        前言

        在開發項目的過程中,經常會需要開發一些彈出框效果,但原生的alert和confirm往往都無法滿足項目的要求。這次在開發基于Vue.js的讀書WebApp的時候總共有兩處需要進行提示的地方,因為一開始就沒有引入其他的組件庫,現在只好自己寫一個模態框組件了。目前只是一個僅滿足當前項目需求的初始版本,因為這個項目比較簡單,也就沒有保留很多的擴展功能。這個組件還是有很多擴展空間的,可以增加更多的自定義內容和樣式。這里只介紹如何去開發一個模態框組件,有需要進行更多擴展的,可以根據自己的需求自行開發。

        組件模板

        <template>
        <div class="dialog">
         <div class="mask"></div>
         <div class="dialog-content">
         <h3 class="title">{{ modal.title }}</h3>
         <p class="text">{{ modal.text }}</p>
         <div class="btn-group">
         <div class="btn" @click="cancel">{{ modal.cancelButtonText }}</div>
         <div class="btn" @click="submit">{{ modal.confirmButtonText }}</div>
         </div>
         </div>
        </div>
        </template>

        模態框結構分為:頭部標題、提示內容和操作區域。同時一般還會有一個遮罩層。此次需求比較簡單,也無需圖標等內容,所以結構上寫的也比較簡單。實際開發中可根據需求對結構進行相應的調整。

        組件樣式

        .dialog {
         position: relative;
        
         .dialog-content {
         position: fixed;
         box-sizing: border-box;
         padding: 20px;
         width: 80%;
         min-height: 140px;
         left: 50%;
         top: 50%;
         transform: translate(-50%, -50%);
         border-radius: 5px;
         background: #fff;
         z-index: 50002;
         .title {
         font-size: 16px;
         font-weight: 600;
         line-height: 30px;
         }
         .text {
         font-size: 14px;
         line-height: 30px;
         color: #555;
         }
         .btn-group {
         display: flex;
         position: absolute;
         right: 0;
         bottom: 10px;
         .btn {
         padding: 10px 20px;
         font-size: 14px;
         &:last-child {
         color: #76D49B;
         }
         }
         }
         }
         .mask {
         position: fixed;
         top: 0;
         left: 0;
         bottom: 0;
         right: 0;
         z-index: 50001;
         background: rgba(0,0,0,.5);
         }
        }
        
        

        樣式比較簡單,就不多說了。

        組件接口

        export default {
         name: 'dialog',
         props: {
         dialogOption: Object
         },
         data() {
         return {
         resolve: '',
         reject: '',
         promise: '', // 保存promise對象
         }
         },
         computed: {
         modal: function() {
         let options = this.dialogOption;
         return {
         title: options.title || '提示',
         text: options.text,
         cancelButtonText: options.cancelButtonText ? options.cancelButtonText : '取消',
         confirmButtonText: options.confirmButtonText ? options.confirmButtonText : '確定',
         }
         }
         },
         methods: {
         //確定,將promise斷定為完成態
         submit() {
         this.resolve('submit');
         },
         // 取消,將promise斷定為reject狀態
         cancel() {
         this.reject('cancel');
         },
         //顯示confirm彈出,并創建promise對象,給父組件調用
         confirm() {
         this.promise = new Promise((resolve, reject) => {
         this.resolve = resolve;
         this.reject = reject;
         });
         return this.promise; //返回promise對象,給父級組件調用
         }
         }
        
        }
        
        

        在模態框組件中定義了三個方法,核心的方法是confirm,此方法是提供給父級組件調用的,返回一個promise對象。使用promise對象主要是為了異步調用,因為很多時候我們使用模態框時需要根據返回結果再進行下一步處理。

        擴展提示:

        如果需要擴展的話,可以通過props的dialogOption傳遞更多的字段,在computed中進行判斷,比如增加一個字段isShowCancelButton可以控制取消按鈕是否顯示。其他擴展同理。

        調用

        <v-dialog v-show="showDialog" :dialog-option="dialogOption" ref="dialog"></v-dialog>
        
        this.showDialog = true;
        this.$refs.dialog.confirm().then(() => {
         this.showDialog = false;
         next();
        }).catch(() => {
         this.showDialog = false;
         next();
        }) 
        
        

        源碼地址

        Dialog組件源碼

        實現效果

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue.js彈出模態框組件開發的示例代碼

        Vue.js彈出模態框組件開發的示例代碼:前言 在開發項目的過程中,經常會需要開發一些彈出框效果,但原生的alert和confirm往往都無法滿足項目的要求。這次在開發基于Vue.js的讀書WebApp的時候總共有兩處需要進行提示的地方,因為一開始就沒有引入其他的組件庫,現在只好自己寫一個模態框組件了。目
        推薦度:
        標簽: VUE 彈出 組件
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 最近中文字幕mv免费高清在线| 羞羞视频免费网站日本| 免费国产在线视频| 亚洲免费人成在线视频观看| 巨胸喷奶水www永久免费| 国产精品亚洲A∨天堂不卡| 天堂在线免费观看| 婷婷久久久亚洲欧洲日产国码AV| a级毛片在线视频免费观看| 亚洲产国偷V产偷V自拍色戒| 久久免费观看国产精品88av| 久久久久亚洲av无码专区喷水 | 亚洲AV综合色区无码二区爱AV| 98精品全国免费观看视频| 亚洲国产成AV人天堂无码| 无码一区二区三区AV免费| 亚洲精品国产第一综合99久久| 免费在线黄色网址| 两个人www免费高清视频| 色拍自拍亚洲综合图区| 免费精品国产日韩热久久| 亚洲a无码综合a国产av中文| 亚洲欧洲一区二区三区| 午夜不卡久久精品无码免费| 2020久久精品亚洲热综合一本 | 亚洲精品国产综合久久一线| 18禁超污无遮挡无码免费网站 | 朝桐光亚洲专区在线中文字幕| 夜色阁亚洲一区二区三区| a级毛片高清免费视频| 亚洲精品美女网站| 亚洲高清无码专区视频| 久久久久久成人毛片免费看| 亚洲13又紧又嫩又水多| 亚洲午夜无码片在线观看影院猛| a毛片在线还看免费网站| 亚洲中文字幕日本无线码| 亚洲日韩人妻第一页| 黄色网址免费大全| 一个人看的免费观看日本视频www| 久久久久亚洲精品天堂|