• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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精品国产自产在线观看| 欧美精品亚洲精品日韩| 国产精品jizz视频| 久久成人国产精品一区二区| 国产精品亚洲片夜色在线| 99久久99久久精品国产片果冻| 久久九九精品99国产精品| 亚洲中文精品久久久久久不卡| 国产成人99久久亚洲综合精品| 1024国产欧美日韩精品| 亚洲国产精品高清久久久| 欧美黑人巨大videos精品| 国产精品va在线观看无码| 91精品美女在线| 精品视频一区二区三三区四区| 亚洲欧美日韩国产一区二区三区精品| 国产精品热久久无码av| 欧美精品免费在线| 精品免费视在线观看| 成人国产精品一区二区网站| 国产三级精品三级在线专区1 | 国产小视频国产精品| 精品无码AV一区二区三区不卡 | 国产精品乱伦| 午夜精品免费在线观看| 久久精品国产99国产电影网| 99re6这里有精品热视频| 国产精品熟女一区二区| 久久精品无码专区免费东京热| 亚洲韩国精品无码一区二区三区| 精品国产一区二区三区AV性色| 精品国产黑色丝袜高跟鞋| 国产亚洲精品xxx| 国产cosplay精品视频| 97久久久精品综合88久久| 精品一区二区三区在线成人 | 久99精品视频在线观看婷亚洲片国产一区一级在线 | 综合精品欧美日韩国产在线| 亚洲精品国产日韩无码AV永久免费网| 久久精品国产第一区二区| 精品人妻少妇一区二区|