效果圖:
子組件:
<template>
<div class="toash" :style="{display:ifShow}">
<span>{{text}}</span>
</div>
</template>
<script>
export default {
props:["text","timer"],
data () {
return {
ifShow:"block"
}
},
mounted(){
setTimeout(()=>{
this.ifShow = "none";
},this.timer)
}
}
</script>
父組件:
<template>
<div class="hello">
<toash text="登錄成功" timer=3000></toash>
</div>
</template>
問題:
我看了很多框架,只要在js里:this.$toash("文字描述")就可以調(diào)用toash了,非常的方便操作。那我這個(gè)寫的組件如何才能在js調(diào)用toash組件呢?
剛好有擼了一篇文章:Vue的插件與extend方法
簡單的說,就是給Vue的原型上寫一個(gè)$toash方法:Vue.prototype.$toash = function(desc){}
就可以在組件內(nèi)this.$toash("文字描述")
這樣用了。
然后,在聲明$toash
方法里,要做的是拿到參數(shù),生成一片dom片段,手動(dòng)document.body.appendChild(),來達(dá)到把toash插入到頁面里。并且合理的控制這塊dom的隱藏。具體邏輯就得看你的需求了。
博文是我自己的筆記,可能寫得不是很詳細(xì)。你可以參(chao)考(xi) element UI 的$message源碼;
最近正在抽vue的ui組件,其中有個(gè)message組件,和你這個(gè)差不多。簡單的說這類組件的難點(diǎn)在于:
好多框架里面這類組件都有兩個(gè)文件,一個(gè)xxx.vue,一個(gè)xxx.js。
message.vue
<template>
<div :class="['jn-message','jn-message-'+icon]" :style="{'z-index':ZINDEX++}">
<i :class="['jn-icon-'+icon,'jn-message-icon']" v-if="icon"></i>
<div class="jn-message-content">
<template v-if="htmlEnable">
<div v-html="$slots.default[0]" class="jn-message-content" >
</div>
</template>
<template v-else>
<slot>
</slot>
</template>
</div>
<i v-if="closeButton" class="jn-message-close jn-icon-close" @click="closeMessage"></i>
</div>
</template>
<script>
import {ZINDEX} from '@/js/utils/const.js'
export default {
name: "jn-message",
data(){
return {
ZINDEX
}
},
mounted() {
setTimeout(() => {
this.close();
}, this.delay);
},
props: {
delay: {
type: Number,
default: 3000
},
htmlEnable: {
type: Boolean,
default: false
},
closeButton:{
type:Boolean,
default:false
},
callback:{
type:Object
},
icon: {
type: String,
default: "info"
}
},
methods: {
close() {
this.$el.remove();
this.$emit("close");
this.$destroy();
},
closeMessage() {
var beforeClose = this.callback.beforeClose,
afterClose = this.callback.afterClose
beforeClose && beforeClose.call(this, this);
this.close();
afterClose && afterClose.call(this, this);
}
}
};
</script>
<style lang="scss">
@import "../../../css/message.scss";
</style>
message.js
import Vue from 'vue';
import Message from './message.vue';
import {mergeDeep} from '@/js/utils/tools.js'
let MessageConstructor = Vue.extend(Message);
const message = function () {
var instance = null,
uid = null
return function (option) {
if(typeof option == 'string'){
option = {
text: option
}
}
var config = mergeDeep({
props: {
htmlEnable: false,
},
text: 'default'
}, option)
if (!instance || instance._uid != uid) {
if (!instance) {
instance = new MessageConstructor({
propsData: config.props
})
uid = instance._uid
} else {
let t = new MessageConstructor({
propsData: config.props
})
if (t._uid != uid) {
instance.closeMessage()
instance = t
uid = t._uid
}
}
instance.$slots.default = [config.text]
instance.$mount()
instance.$on('close', function () {
instance = null
uid = null
})
document.body.appendChild(instance.$el)
}
return instance
}
}
const plugin = {}
plugin.install = function (Vue, options) {
Vue.prototype.$message = message()
}
export default plugin;
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。