欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue?eventBus事件總線封裝后再用的方式

 更新時間:2022年06月23日 09:37:55   作者:Gaby  
EventBus稱為事件總線,當(dāng)兩個組件屬于不同的兩個組件分支,或者兩個組件沒有任何聯(lián)系的時候,不想使用Vuex這樣的庫來進行數(shù)據(jù)通信,就可以通過事件總線來進行通信,這篇文章主要給大家介紹了關(guān)于Vue?eventBus事件總線封裝后再用的相關(guān)資料,需要的朋友可以參考下

前言

現(xiàn)在的項目中是不是在使用 eventbus 的時候,還有很多人都是直接創(chuàng)建一個vue 實例直接使用的,哪里需要哪里引入,而沒有簡單的處理下。接下來就先說下這種方式。

空vue實例構(gòu)建的事件總線

在改造一個項目的時候就發(fā)現(xiàn),里面的 bus.js 文件中就是這么處理的。兩行代碼搞定。

import Vue from "vue"; 
export default new Vue()

使用的時候,就沒那么簡單了,有這么一個空的容器,在需要傳值的組件里就得引入這個文件。然后通過 bus.on()綁定事件,通過bus.on() 綁定事件,通過 bus.on()綁定事件,通過bus.emit()進行分發(fā)事件。

import bus from'@/utils/bus'
// 綁定事件
bus.$on('event',()=>{....})

// 監(jiān)聽事件
bus.$emit('event',this.tasks)

這種方式使用起來也簡單但也不太方便,畢竟到處都要引入下,那有沒有什么辦法可以解決呢。繼續(xù)...

簡單的方式

先來個簡單的吧,雖然看上去有點不太習(xí)慣,但的確也挺好使的,而且直接掛載到vue實例上,哪里用哪里直接 this 即可,相對來說方便多了,不用到處引入文件了。掛載方式如下:

new Vue({
  beforeCreate() {
    // 盡量早地執(zhí)行掛載全局事件總線對象的操作
    Vue.prototype.$bus = this;
  },
  router,
  store,
  render: h => h(App)
}).$mount('#app');

這種方式雖然掛載簡單,但是使用上還是有點不能盡如人意,不信你看:

// 綁定事件
this.$bus.$on('send', ()=>{ // 使用事件 });

// 分發(fā)事件
this.$bus.$emit('send', 'emit');

猛地一看,這不挺好的么,挺簡單的啊!可是我有潔癖怎么辦,我有強迫癥怎么辦,我就不想看到兩個 $符怎么辦我就只想要下面的這種方式的:

// 綁定事件
this.$bus.on('send', ()=>{ // 使用事件 });

// 分發(fā)事件
this.$bus.emit('send', 'emit');

那你說,人家都是 $on、$emit的用的,怎么就不行了啊,實在不行就自己改造個吧,說干就干,who 怕 who,安排!

復(fù)雜又簡單的方式

先構(gòu)思下,想要個什么樣效果的,比如,我不想要用的時候都要引入下文件,要一次引入,處處可用; 我不想要兩個 $ 的調(diào)用方式,或者說可以隨心情的使用; 再者通過Vue對象也可以直接使用。

思路大概理了理,那就開干唄,簡單干脆點,直接上代碼!

'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;

來看看使用方式吧,是不是跟想象的一樣簡單,在 main.js 中引入,并通過 vue.use() 注入進來,加載方式就這么簡單。

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)心會寫錯調(diào)用方式了。

總結(jié)

到此這篇關(guān)于Vue eventBus事件總線封裝后再用的文章就介紹到這了,更多相關(guān)Vue eventBus事件總線封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue通知提醒消息舉例詳解

    vue通知提醒消息舉例詳解

    在項目開發(fā)過程中,可能需要實現(xiàn)以下場景,未讀消息提示、報警信息、消息通知等,下面這篇文章主要給大家介紹了關(guān)于vue通知提醒消息的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue中如何下載excel流文件及設(shè)置下載文件名

    vue中如何下載excel流文件及設(shè)置下載文件名

    這篇文章主要介紹了vue中如何下載excel流文件及設(shè)置下載文件名,對vue感興趣的同學(xué),可以參考下
    2021-05-05
  • vue3+pinia用戶信息持久緩存token的問題解決

    vue3+pinia用戶信息持久緩存token的問題解決

    本文主要介紹了vue3+pinia用戶信息持久緩存token的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • element-ui中的select下拉列表設(shè)置默認值方法

    element-ui中的select下拉列表設(shè)置默認值方法

    今天小編就為大家分享一篇element-ui中的select下拉列表設(shè)置默認值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • vue單向以及雙向數(shù)據(jù)綁定方式(v-bind和v-model的使用)

    vue單向以及雙向數(shù)據(jù)綁定方式(v-bind和v-model的使用)

    這篇文章主要介紹了vue單向以及雙向數(shù)據(jù)綁定方式(v-bind和v-model的使用),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue?this.$router和this.$route區(qū)別解析及路由傳參的2種方式?&&?this.$route的各種語法

    vue?this.$router和this.$route區(qū)別解析及路由傳參的2種方式?&&?this.$route

    this.$router?相當(dāng)于一個全局的路由器對象,包含了很多屬性和對象(比如?history?對象),任何頁面都可以調(diào)用其?push(),?replace(),?go()?等方法,本文給大家介紹Vue中this.$router與this.$route的區(qū)別?及push()方法,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • vue登錄頁面回車執(zhí)行事件@keyup.enter.native問題

    vue登錄頁面回車執(zhí)行事件@keyup.enter.native問題

    這篇文章主要介紹了vue登錄頁面回車執(zhí)行事件@keyup.enter.native問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue處理一千張圖片進行分頁加載思路詳解

    vue處理一千張圖片進行分頁加載思路詳解

    開發(fā)過程中,如果后端一次性返回你1000多條圖片或數(shù)據(jù),那我們前端應(yīng)該怎么用什么思路去更好的渲染呢?這篇文章主要介紹了vue處理一千張圖片進行分頁加載,需要的朋友可以參考下
    2023-02-02
  • Vue?echarts@4.x中國地圖及AMap相關(guān)API使用詳解

    Vue?echarts@4.x中國地圖及AMap相關(guān)API使用詳解

    這篇文章主要為大家介紹了Vue使用echarts@4.x中國地圖及AMap相關(guān)API使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Vue3?實現(xiàn)驗證碼倒計時功能(刷新保持狀態(tài))

    Vue3?實現(xiàn)驗證碼倒計時功能(刷新保持狀態(tài))

    倒計時的運用場景是需要經(jīng)常用到的,但是根據(jù)業(yè)務(wù)的不同,好比手機驗證碼或者是郵箱驗證碼之類的,即使用戶跳轉(zhuǎn)到其它頁面或者刷新,再次回到登錄也,驗證碼的倒計時也得保持狀態(tài),下面通過本文給大家分享Vue3?驗證碼倒計時功能實現(xiàn),感興趣的朋友一起看看吧
    2022-08-08

最新評論