用Vue.extend構(gòu)建消息提示組件的方法實(shí)例
前提
前段時(shí)間自己做的vue練手項(xiàng)目,需要一個(gè)通用的消息提示組件,但是消息提示這種組件我更想用方法來(lái)調(diào)用,而不是在各個(gè)頁(yè)面上都添加個(gè)組件(那樣感覺(jué)很麻煩,重度懶癌患者),于是就上網(wǎng)差查了查,并研究了ElementUI的message源碼。自己弄出來(lái)一個(gè)簡(jiǎn)陋的消息提示組件
Vue.extend是什么

按照官方文檔說(shuō)法,他是一個(gè)類構(gòu)造器,用來(lái)創(chuàng)建一個(gè)子類vue并返回構(gòu)造函數(shù),而Vue.component它的任務(wù)是將給定的構(gòu)造函數(shù)與字符串ID相關(guān)聯(lián),以便Vue.js可以在模板中接收它。
了解了這點(diǎn)之后我們開(kāi)始做我們的消息提示組件吧。
消息提示組件
首先我們先創(chuàng)建我們的提示組件的模板
<template>
<transition name="message-fade">
<div class="message" v-show="show">
<span class="icon"><icon name="info"></icon></span>
<p>{{message}}</p>
</div>
</transition>
</template>
<script>
export default {
name: 'v-message',
mounted(){
this.StartTime();
},
data(){
return {
message: '123',
show: false,
timer: null
}
},
methods:{
StartTime(){
this.show = true;
if(this.timer){
clearTimeOut(this.timer)
}else{
this.timer = setTimeout(()=>{
this.show = false
}, 3000);
}
}
}
}
</script>
之后我們需要用將message.vue傳到Vue.extend()里
import Vue from 'vue';
let MessageBox = Vue.extend(require('./message.vue'));
let instance;
var message = function(options){
if(typeof options === 'string'){
options = {
message: options
}
}
//生成組件
instance = new MessageBox({
data: options
})
//組件需要掛載在dom元素上
instance.vm = instance.$mount();
//根據(jù)不同的類型,設(shè)置不同消息的背景顏色
if(options.type){
instance.vm.$el.children[0].className += ` icon__${options.type}`;
}
document.body.appendChild(instance.vm.$el);
return instance.vm;
}
const type = ['success', 'info', 'warning', 'error'];
type.forEach((type)=>{
message[type] = options =>{
if(typeof options === 'string'){
options = {
message: options
}
}
options.type = type;
return message(options);
}
})
export default message;
之后用掛在全局方法上,之后用this.$message()方法調(diào)用
vue.prototype.$message = message;
最后的效果圖

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue中transition單個(gè)節(jié)點(diǎn)過(guò)渡與transition-group列表過(guò)渡全過(guò)程
這篇文章主要介紹了Vue中transition單個(gè)節(jié)點(diǎn)過(guò)渡與transition-group列表過(guò)渡全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue封裝自定義指令之動(dòng)態(tài)顯示title操作(溢出顯示,不溢出不顯示)
這篇文章主要介紹了vue封裝自定義指令之動(dòng)態(tài)顯示title操作(溢出顯示,不溢出不顯示),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
vue里如何主動(dòng)銷毀keep-alive緩存的組件
這篇文章主要介紹了vue里如何主動(dòng)銷毀keep-alive緩存的組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
Vue?響應(yīng)式系統(tǒng)依賴收集過(guò)程原理解析
Vue 初始化時(shí)就會(huì)通過(guò) Object.defineProperty 攔截屬性的 getter 和 setter ,為對(duì)象的每個(gè)值創(chuàng)建一個(gè) dep 并用 Dep.addSub() 來(lái)存儲(chǔ)該屬性值的 watcher 列表,這篇文章主要介紹了Vue?響應(yīng)式系統(tǒng)依賴收集過(guò)程分析,需要的朋友可以參考下2022-06-06
vue中$set的使用(結(jié)合在實(shí)際應(yīng)用中遇到的坑)
這篇文章主要介紹了vue中$set的使用(結(jié)合在實(shí)際應(yīng)用中遇到的坑),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

