国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
主站蜘蛛池模板: 国产在线成人一区二区 | 日本成人久久 | 欧美日韩国产va另类 | 一区二区三区欧美日韩 | 日韩电影第一页 | 欧美亚洲另类综合 | 日本黄 色 成 年 人免费观看 | 国产高清免费不卡观看 | 国产特级全黄一级毛片不卡 | 欧美亚洲综合另类 | 国产网站视频 | 成人欧美一区二区三区黑人 | 国产麻豆精品 | 一本一本久久α久久精品66 | 国产在线观看不卡 | 看真人视频一级毛片 | 爱色电影 | 成人国内精品久久久久影院 | 爽爽窝窝午夜精品一区二区 | 国产一区欧美二区 | 国产精品视_精品国产免费 国产精品视频第一区二区三区 | 伊人色播 | 久久久91精品国产一区二区 | 欧美精品国产综合久久 | 国产成人精品一区二区视频 | 欧美精品国产日韩综合在线 | 国产成人精品免费视频大全五级 | 亚洲色图日韩精品 | 亚州色图欧美色图 | 国产亚洲精品成人婷婷久久小说 | 日韩视频欧美视频 | 日韩欧美极品 | 国产亚洲精品va在线 | 国产精品一区二区av | 美女网站全黄 | 亚洲欧洲免费 | 91久久国产综合精品 | 欧美一区二区不卡视频 | 欧美日韩亚洲综合 | 国产成人免费在线 | 亚洲尹人九九大色香蕉网站 |