<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開發實現全局調用的MessageBox組件實例代碼

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

        vue.js開發實現全局調用的MessageBox組件實例代碼

        vue.js開發實現全局調用的MessageBox組件實例代碼:前言 一開始接觸到vue中的組件的時候,對于組件的理解還是不夠充分的,最近在開發個人博客項目中,一開始就沒準備使用一些現在比較流行的UI庫(畢竟是個人項目,多練練手還是好的),所以需要自己開發幾個全局組件,這里以MessageBox為例記錄下vue.js
        推薦度:
        導讀vue.js開發實現全局調用的MessageBox組件實例代碼:前言 一開始接觸到vue中的組件的時候,對于組件的理解還是不夠充分的,最近在開發個人博客項目中,一開始就沒準備使用一些現在比較流行的UI庫(畢竟是個人項目,多練練手還是好的),所以需要自己開發幾個全局組件,這里以MessageBox為例記錄下vue.js

        前言

        一開始接觸到vue中的組件的時候,對于組件的理解還是不夠充分的,最近在開發個人博客項目中,一開始就沒準備使用一些現在比較流行的UI庫(畢竟是個人項目,多練練手還是好的),所以需要自己開發幾個全局組件,這里以MessageBox為例記錄下vue.js如何開發全局組件。所謂全局變量是針對vue實例下說的,即所有的vue實際都可以運用到這個組件,局部組件就是針對某個實例來說的,只有這個vue實例下才能發揮作用,下面話不多說了,來一看看詳細的介紹吧。

        源碼

        github地址:Talk is cheap. Show me the code.

        本地下載地址:http://xiazai.jb51.net/201711/yuanma/vue-messagebox(jb51.net).rar

        組件模板

        // /src/components/MessageBox/index.vue
        <template>
         <div class="message-box" v-show="isShowMessageBox">
         <div class="mask" @click="cancel"></div>
         <div class="message-content">
         <svg class="icon" aria-hidden="true" @click="cancel">
         <use xlink:href="#icon-delete" rel="external nofollow" ></use>
         </svg>
         <h3 class="title">{{ title }}</h3>
         <p class="content">{{ content }}</p>
         <div>
         <input type="text" v-model="inputValue" v-if="isShowInput" ref="input">
         </div>
         <div class="btn-group">
         <button class="btn-default" @click="cancel" v-show="isShowCancelBtn">{{ cancelBtnText }}</button>
         <button class="btn-primary btn-confirm" @click="confirm" v-show="isShowConfimrBtn">{{ confirmBtnText }}</button>
         </div>
         </div>
         </div>
         </template>
         
         <script>
         export default {
         props: {
         title: {
         type: String,
         default: '標題'
         },
         content: {
         type: String,
         default: '這是彈框內容'
         },
         isShowInput: false,
         inputValue: '',
         isShowCancelBtn: {
         type: Boolean,
         default: true
         },
         isShowConfimrBtn: {
         type: Boolean,
         default: true
         },
         cancelBtnText: {
         type: String,
         default: '取消'
         },
         confirmBtnText: {
         type: String,
         default: '確定'
         }
         },
         data () {
         return {
         isShowMessageBox: false,
         resolve: '',
         reject: '',
         promise: '' // 保存promise對象
         };
         },
         methods: {
         // 確定,將promise斷定為resolve狀態
         confirm: function () {
         this.isShowMessageBox = false;
         if (this.isShowInput) {
         this.resolve(this.inputValue);
         } else {
         this.resolve('confirm');
         }
         this.remove();
         },
         // 取消,將promise斷定為reject狀態
         cancel: function () {
         this.isShowMessageBox = false;
         this.reject('cancel');
         this.remove();
         },
         // 彈出messageBox,并創建promise對象
         showMsgBox: function () {
         this.isShowMessageBox = true;
         this.promise = new Promise((resolve, reject) => {
         this.resolve = resolve;
         this.reject = reject;
         });
         // 返回promise對象
         return this.promise;
         },
         remove: function () {
         setTimeout(() => {
         this.destroy();
         }, 300);
         },
         destroy: function () {
         this.$destroy();
         document.body.removeChild(this.$el);
         }
         }
         };
         </script>
         <style lang="scss" scoped>
         // 此處省略 ...
         </style>

        給組件添加全局功能

        vue.js官方文檔中有開發插件的介紹。具體實現代碼如下:

        // /src/components/MessageBox/index.js
        
        import msgboxVue from './index.vue'; 
        // 定義插件對象
        const MessageBox = {};
        // vue的install方法,用于定義vue插件
        MessageBox.install = function (Vue, options) {
         const MessageBoxInstance = Vue.extend(msgboxVue);
         let currentMsg, instance;
         const initInstance = () => {
         // 實例化vue實例
         currentMsg = new MessageBoxInstance();
         let msgBoxEl = currentMsg.$mount().$el;
         document.body.appendChild(msgBoxEl);
         };
         // 在Vue的原型上添加實例方法,以全局調用
         Vue.prototype.$msgBox = {
         showMsgBox (options) {
         if (!instance) {
         initInstance();
         }
         if (typeof options === 'string') {
         currentMsg.content = options;
         } else if (typeof options === 'object') {
         Object.assign(currentMsg, options);
         }
         return currentMsg.showMsgBox();
         }
         };
        };
        export default MessageBox;

        全局使用

        // src/main.js
        import MessageBox from './components/MessageBox/index';
        Vue.use(MessageBox);

        頁面調用

        按照之前定義好的方法,可以在各個頁面中愉快的調用該組件了。

        this.$msgBox.showMsgBox({
         title: '添加分類',
         content: '請填寫分類名稱',
         isShowInput: true
        }).then(async (val) => {
         // ... 
        }).catch(() => {
         // ...
        }); 

        最后來張效果圖


        總結

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

        文檔

        vue.js開發實現全局調用的MessageBox組件實例代碼

        vue.js開發實現全局調用的MessageBox組件實例代碼:前言 一開始接觸到vue中的組件的時候,對于組件的理解還是不夠充分的,最近在開發個人博客項目中,一開始就沒準備使用一些現在比較流行的UI庫(畢竟是個人項目,多練練手還是好的),所以需要自己開發幾個全局組件,這里以MessageBox為例記錄下vue.js
        推薦度:
        標簽: VUE 全局 組件
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久青草免费91观看| rh男男车车的车车免费网站| 91精品国产免费| 亚洲av日韩av高潮潮喷无码| 免费A级毛片av无码| 亚洲成人高清在线观看| 永久免费毛片在线播放| 亚洲综合国产成人丁香五月激情| 久久综合AV免费观看| 亚洲一区二区三区国产精华液| 好男人看视频免费2019中文| 亚洲国产精品无码观看久久| 国产成人免费a在线视频app | 亚洲精品成人在线| 精品久久久久久亚洲综合网| 免费久久精品国产片香蕉| 成人免费夜片在线观看| 国产成人精品日本亚洲网站| 亚洲一级免费毛片| 亚洲欧洲无码一区二区三区| 亚洲电影日韩精品| 亚洲精品免费观看| 亚洲色大成网站www尤物| 亚洲国产午夜福利在线播放| 男人都懂www深夜免费网站| 亚洲人成电影在线观看网| 国产免费观看青青草原网站| 成人妇女免费播放久久久| 亚洲日韩中文字幕天堂不卡| 国产女高清在线看免费观看| 最近免费mv在线观看动漫| 亚洲va精品中文字幕| 免费播放春色aⅴ视频| 暖暖在线视频免费视频| 亚洲AV一区二区三区四区| 成人午夜亚洲精品无码网站| 免费可以看黄的视频s色| 日韩毛片免费一二三| 亚洲日本国产精华液| 免费a级毛片无码av| 日韩免费人妻AV无码专区蜜桃 |