<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
        主站蜘蛛池模板: 亚洲M码 欧洲S码SSS222| 99在线观看视频免费| 成人看的午夜免费毛片| 亚洲精品不卡视频| 国产精品免费网站| 亚洲综合伊人制服丝袜美腿| 成人性生交视频免费观看| 亚洲色偷偷色噜噜狠狠99网| 性一交一乱一视频免费看| 亚洲国产美女精品久久久| 亚洲?v无码国产在丝袜线观看| 免费人成再在线观看网站| 国产L精品国产亚洲区久久| 特级做A爰片毛片免费看无码| 久久精品视频亚洲| 2020久久精品国产免费| 在线观看日本亚洲一区| 免费a级毛片无码av| 中文字幕版免费电影网站| 亚洲AV日韩精品久久久久| 五月亭亭免费高清在线| 亚洲乱色伦图片区小说| 亚洲免费日韩无码系列 | 亚洲不卡中文字幕| 无码国产精品久久一区免费| 美女免费视频一区二区| 亚洲熟妇丰满多毛XXXX| 亚洲一区二区三区免费在线观看 | 国产偷国产偷亚洲高清人| 最新亚洲成av人免费看| 久久ww精品w免费人成| 亚洲国产精品无码久久九九大片| 亚洲日韩国产成网在线观看| 狼群影院在线观看免费观看直播| 亚洲精品蜜夜内射| 亚洲无线观看国产精品| 成人免费网站在线观看| 91免费在线视频| 亚洲综合国产成人丁香五月激情 | 国产l精品国产亚洲区在线观看| 美女视频黄是免费的网址|