Vue?eventBus事件總線封裝后再用的方式
前言
現(xiàn)在的項(xiàng)目中是不是在使用 eventbus 的時(shí)候,還有很多人都是直接創(chuàng)建一個(gè)vue 實(shí)例直接使用的,哪里需要哪里引入,而沒(méi)有簡(jiǎn)單的處理下。接下來(lái)就先說(shuō)下這種方式。
空vue實(shí)例構(gòu)建的事件總線
在改造一個(gè)項(xiàng)目的時(shí)候就發(fā)現(xiàn),里面的 bus.js 文件中就是這么處理的。兩行代碼搞定。
import Vue from "vue"; export default new Vue()
使用的時(shí)候,就沒(méi)那么簡(jiǎn)單了,有這么一個(gè)空的容器,在需要傳值的組件里就得引入這個(gè)文件。然后通過(guò) bus.on()綁定事件,通過(guò)bus.on() 綁定事件,通過(guò) bus.on()綁定事件,通過(guò)bus.emit()進(jìn)行分發(fā)事件。
import bus from'@/utils/bus'
// 綁定事件
bus.$on('event',()=>{....})
// 監(jiān)聽(tīng)事件
bus.$emit('event',this.tasks)
這種方式使用起來(lái)也簡(jiǎn)單但也不太方便,畢竟到處都要引入下,那有沒(méi)有什么辦法可以解決呢。繼續(xù)...
簡(jiǎn)單的方式
先來(lái)個(gè)簡(jiǎn)單的吧,雖然看上去有點(diǎn)不太習(xí)慣,但的確也挺好使的,而且直接掛載到vue實(shí)例上,哪里用哪里直接 this 即可,相對(duì)來(lái)說(shuō)方便多了,不用到處引入文件了。掛載方式如下:
new Vue({
beforeCreate() {
// 盡量早地執(zhí)行掛載全局事件總線對(duì)象的操作
Vue.prototype.$bus = this;
},
router,
store,
render: h => h(App)
}).$mount('#app');
這種方式雖然掛載簡(jiǎn)單,但是使用上還是有點(diǎn)不能盡如人意,不信你看:
// 綁定事件
this.$bus.$on('send', ()=>{ // 使用事件 });
// 分發(fā)事件
this.$bus.$emit('send', 'emit');
猛地一看,這不挺好的么,挺簡(jiǎn)單的??!可是我有潔癖怎么辦,我有強(qiáng)迫癥怎么辦,我就不想看到兩個(gè) $符怎么辦我就只想要下面的這種方式的:
// 綁定事件
this.$bus.on('send', ()=>{ // 使用事件 });
// 分發(fā)事件
this.$bus.emit('send', 'emit');
那你說(shuō),人家都是 $on、$emit的用的,怎么就不行了啊,實(shí)在不行就自己改造個(gè)吧,說(shuō)干就干,who 怕 who,安排!
復(fù)雜又簡(jiǎn)單的方式
先構(gòu)思下,想要個(gè)什么樣效果的,比如,我不想要用的時(shí)候都要引入下文件,要一次引入,處處可用; 我不想要兩個(gè) $ 的調(diào)用方式,或者說(shuō)可以隨心情的使用; 再者通過(guò)Vue對(duì)象也可以直接使用。
思路大概理了理,那就開(kāi)干唄,簡(jiǎn)單干脆點(diǎn),直接上代碼!
'use strict';
function VueBus(Vue) {
let bus = new Vue();
Object.defineProperties(bus, {
on: {
get() {
return this.$on.bind(this);
}
},
once: {
get() {
return this.$once.bind(this);
}
},
off: {
get() {
return this.$off.bind(this);
}
},
emit: {
get() {
return this.$emit.bind(this);
}
}
});
Object.defineProperty(Vue, 'bus', {
get() {
return bus;
}
});
Object.defineProperty(Vue.prototype, '$bus', {
get() {
return bus;
}
});
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(VueBus);
}
return bus;
}
export default VueBus;
來(lái)看看使用方式吧,是不是跟想象的一樣簡(jiǎn)單,在 main.js 中引入,并通過(guò) vue.use() 注入進(jìn)來(lái),加載方式就這么簡(jiǎn)單。
import EventBus from '@/libs/bus'; Vue.use(EventBus);
使用上更靈活了,想怎么用就怎么用,支持以下幾種方式,至于$off、$once使用上通 $on、$emit一樣。
// 綁定事件
this.$bus.on('send', this.handleSend); // 推薦
this.$bus.$on('send', this.handleSend);
Vue.bus.on('send', this.handleSend);
Vue.bus.$on('send', this.handleSend);
// 分發(fā)事件
this.$bus.emit('send', ''); // 推薦
this.$bus.$emit('send', 'emit');
Vue.bus.emit('send', 'emit');
Vue.bus.$emit('send', 'emit');
上面這幾種方式均可。是不是更靈活了呢。想怎么用就怎么用,再也不用擔(dān)心會(huì)寫(xiě)錯(cuò)調(diào)用方式了。
總結(jié)
到此這篇關(guān)于Vue eventBus事件總線封裝后再用的文章就介紹到這了,更多相關(guān)Vue eventBus事件總線封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3+pinia用戶(hù)信息持久緩存token的問(wèn)題解決
本文主要介紹了vue3+pinia用戶(hù)信息持久緩存token的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
element-ui中的select下拉列表設(shè)置默認(rèn)值方法
今天小編就為大家分享一篇element-ui中的select下拉列表設(shè)置默認(rèn)值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
vue單向以及雙向數(shù)據(jù)綁定方式(v-bind和v-model的使用)
這篇文章主要介紹了vue單向以及雙向數(shù)據(jù)綁定方式(v-bind和v-model的使用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
vue?this.$router和this.$route區(qū)別解析及路由傳參的2種方式?&&?this.$route
this.$router?相當(dāng)于一個(gè)全局的路由器對(duì)象,包含了很多屬性和對(duì)象(比如?history?對(duì)象),任何頁(yè)面都可以調(diào)用其?push(),?replace(),?go()?等方法,本文給大家介紹Vue中this.$router與this.$route的區(qū)別?及push()方法,感興趣的朋友跟隨小編一起看看吧2023-10-10
vue登錄頁(yè)面回車(chē)執(zhí)行事件@keyup.enter.native問(wèn)題
這篇文章主要介紹了vue登錄頁(yè)面回車(chē)執(zhí)行事件@keyup.enter.native問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Vue?echarts@4.x中國(guó)地圖及AMap相關(guān)API使用詳解
這篇文章主要為大家介紹了Vue使用echarts@4.x中國(guó)地圖及AMap相關(guān)API使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能(刷新保持狀態(tài))
倒計(jì)時(shí)的運(yùn)用場(chǎng)景是需要經(jīng)常用到的,但是根據(jù)業(yè)務(wù)的不同,好比手機(jī)驗(yàn)證碼或者是郵箱驗(yàn)證碼之類(lèi)的,即使用戶(hù)跳轉(zhuǎn)到其它頁(yè)面或者刷新,再次回到登錄也,驗(yàn)證碼的倒計(jì)時(shí)也得保持狀態(tài),下面通過(guò)本文給大家分享Vue3?驗(yàn)證碼倒計(jì)時(shí)功能實(shí)現(xiàn),感興趣的朋友一起看看吧2022-08-08

