最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue總線(xiàn)機(jī)制(bus)知識(shí)點(diǎn)詳解

 更新時(shí)間:2020年05月10日 17:12:34   作者:csdn  
在本篇文章中小編給大家整理的是關(guān)于vue總線(xiàn)機(jī)制(bus)知識(shí)點(diǎn)總結(jié),有興趣的朋友們可以跟著學(xué)習(xí)下。

vue中非父子組件之間通信除了使用vuex,也可以通過(guò)bus總線(xiàn),兩者適用場(chǎng)景不同。

bus適合小項(xiàng)目、數(shù)據(jù)被更少組件使用的項(xiàng)目,對(duì)于中大型項(xiàng)目 數(shù)據(jù)在很多組件之間使用的情況 bus就不太適用了。bus其實(shí)就是一個(gè)發(fā)布訂閱模式,利用vue的自定義事件機(jī)制,在觸發(fā)的地方通過(guò)$emit向外發(fā)布一個(gè)事件,在需要監(jiān)聽(tīng)的頁(yè)面,通過(guò)$on監(jiān)聽(tīng)事件。

vuex適用中大型項(xiàng)目、數(shù)據(jù)在多組件之間公用的情況。

簡(jiǎn)單介紹兩者的區(qū)別之后,就要介紹下我在一個(gè)項(xiàng)目中遇到的一個(gè)場(chǎng)景了,這個(gè)場(chǎng)景使用bus可能更加適合些:

//main.js
 
Vue.prototype.bus = new Vue();
new Vue({
 render: h => h(App)
  ...
}).$mount('#app');
/*
*通過(guò)把一個(gè)vue實(shí)例賦于Vue構(gòu)造函數(shù)原型上的一個(gè)屬性bus(當(dāng)然起任何名稱(chēng)都是可以的)
*而每個(gè)Vue實(shí)例都是有$emit和$on方法的
*由于bus屬性在Vue原型上,根據(jù)原型鏈查找規(guī)則,在頁(yè)面中我們就可以通過(guò) this.bus.$emit 和 
*this.bus.$on來(lái)進(jìn)行跨組件通信了
*/
//導(dǎo)航欄組件中
//點(diǎn)擊事件發(fā)生時(shí)發(fā)布一個(gè)事件
this.bus.$emit('even-name',args1, arg2 , ...)
 
//這里我們可以把點(diǎn)擊導(dǎo)航的相關(guān)信息攜帶出去
//路由顯示頁(yè)面中
this.bus.$on('event-name', (...args) => {
  //根據(jù)參數(shù)來(lái)進(jìn)行路由跳轉(zhuǎn)
})

這個(gè)事件監(jiān)聽(tīng) 和 路由跳轉(zhuǎn)的邏輯我們可以弄成一個(gè)mixins進(jìn)行復(fù)用。到這樣就完成了。

但是這樣還是有點(diǎn)麻煩,每個(gè)頁(yè)面都需要引入mixins,有沒(méi)有更好的辦法呢?答案是肯定的。我們項(xiàng)目導(dǎo)航欄是通過(guò)路由meta循環(huán)出來(lái)的,每項(xiàng)有對(duì)應(yīng)導(dǎo)航欄的路由,結(jié)構(gòu)如下:

 {
  path: '/xxxx',
  component: xxxx,
  meta: [
   {
    name: '導(dǎo)航1'
   }, 
   {
    name: '導(dǎo)航2',
    url: '我是導(dǎo)航2的路由'
   },
   {
    name: '導(dǎo)航3',
    url: '我是導(dǎo)航3的路由'
   },
   {
    name: '導(dǎo)航4',
   }
  ]
 },

在思索時(shí)我忽然發(fā)現(xiàn)每個(gè)導(dǎo)航欄的index、導(dǎo)航欄長(zhǎng)度length、及router.go方法之間有一個(gè)規(guī)律,那就是我們可以把index + 1 - length作為router.go的參數(shù),從而不用再關(guān)心query參數(shù)了,而且只需要在導(dǎo)航欄組件操作一次就可以了,完美!

//導(dǎo)航欄組件點(diǎn)擊事件處理函數(shù)中
 
if (url) {
  const meta = this.$route.meta;
  this.$router.go(index + 1 - meta.length)
}

知識(shí)點(diǎn)補(bǔ)充:

將Bus注入到Vue根對(duì)象中

import Vue from 'vue'
const Bus = new Vue()

var app= new Vue({
  el:'#app',
   data:{
    Bus
  }  

})

在子組件中通過(guò)this.$root.Bus.$on(),this.$root.Bus.$emit()來(lái)調(diào)用

以上就是vue總線(xiàn)機(jī)制(bus)知識(shí)點(diǎn)詳解的詳細(xì)內(nèi)容,更多關(guān)于vue中總線(xiàn)機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue清除瀏覽器全部cookie的問(wèn)題及解決方法(絕對(duì)有效!)

    vue清除瀏覽器全部cookie的問(wèn)題及解決方法(絕對(duì)有效!)

    最近項(xiàng)目要實(shí)現(xiàn)關(guān)閉瀏覽器清除用戶(hù)緩存的功能,下面這篇文章主要給大家介紹了關(guān)于vue清除瀏覽器全部cookie的問(wèn)題及解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • el-input限制輸入正整數(shù)的兩種實(shí)現(xiàn)方式

    el-input限制輸入正整數(shù)的兩種實(shí)現(xiàn)方式

    el-input框是Element UI庫(kù)中的一個(gè)輸入框組件,用于接收用戶(hù)的輸入,這篇文章主要介紹了el-input限制輸入正整數(shù),需要的朋友可以參考下
    2024-02-02
  • Vue深入理解插槽slot的使用

    Vue深入理解插槽slot的使用

    最近被問(wèn)起是否了解vue的插槽(slot),咋一想發(fā)現(xiàn),似乎很少用到這玩意。所以整理了下slot的一些用法
    2022-08-08
  • vue中利用three.js實(shí)現(xiàn)全景圖的完整示例

    vue中利用three.js實(shí)現(xiàn)全景圖的完整示例

    這篇文章主要給大家介紹了關(guān)于vue中利用three.js實(shí)現(xiàn)全景圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 使用Vue3和Plotly.js打造一個(gè)3D圖在線(xiàn)展示的實(shí)現(xiàn)步驟

    使用Vue3和Plotly.js打造一個(gè)3D圖在線(xiàn)展示的實(shí)現(xiàn)步驟

    三維網(wǎng)格圖廣泛應(yīng)用于科學(xué)可視化、醫(yī)學(xué)成像、工程設(shè)計(jì)等領(lǐng)域,用于展示復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和空間分布,本文給大家介紹了使用Vue3和Plotly.js打造一個(gè)3D圖在線(xiàn)展示的實(shí)現(xiàn)步驟,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • Vue利用localStorage本地緩存使頁(yè)面刷新驗(yàn)證碼不清零功能的實(shí)現(xiàn)

    Vue利用localStorage本地緩存使頁(yè)面刷新驗(yàn)證碼不清零功能的實(shí)現(xiàn)

    這篇文章主要介紹了Vue利用localStorage本地緩存使頁(yè)面刷新驗(yàn)證碼不清零功能的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 構(gòu)建大型 Vue.js 項(xiàng)目的10條建議(小結(jié))

    構(gòu)建大型 Vue.js 項(xiàng)目的10條建議(小結(jié))

    這篇文章主要介紹了構(gòu)建大型 Vue.js 項(xiàng)目的10條建議(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Vue3全局配置Axios并解決跨域請(qǐng)求問(wèn)題示例詳解

    Vue3全局配置Axios并解決跨域請(qǐng)求問(wèn)題示例詳解

    axios 是一個(gè)基于promise的HTTP庫(kù),支持promise所有的API,本文給大家介紹Vue3全局配置Axios并解決跨域請(qǐng)求問(wèn)題,內(nèi)容從axios部署開(kāi)始到解決跨域問(wèn)題,感興趣的朋友一起看看吧
    2023-11-11
  • 輕松理解vue的雙向數(shù)據(jù)綁定問(wèn)題

    輕松理解vue的雙向數(shù)據(jù)綁定問(wèn)題

    Vue是當(dāng)前很火的一款MVVM的輕量級(jí)框架,它是以數(shù)據(jù)驅(qū)動(dòng)和組件化的思想構(gòu)建的。因?yàn)樗峁┝撕?jiǎn)潔易于理解的api,使得我們很容易上手。這篇文章給大家介紹了vue雙向數(shù)據(jù)綁定問(wèn)題,感興趣的朋友一起看看吧
    2017-10-10
  • vue主動(dòng)刷新頁(yè)面及列表數(shù)據(jù)刪除后的刷新實(shí)例

    vue主動(dòng)刷新頁(yè)面及列表數(shù)據(jù)刪除后的刷新實(shí)例

    今天小編就為大家分享一篇vue主動(dòng)刷新頁(yè)面及列表數(shù)據(jù)刪除后的刷新實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論

罗城| 华亭县| 宁德市| 延川县| 开远市| 揭阳市| 漳平市| 灵石县| 金昌市| 开阳县| 莆田市| 台湾省| 松滋市| 长子县| 安顺市| 泰来县| 错那县| 吉安县| 洱源县| 建平县| 陆丰市| 和平区| 阳朔县| 富蕴县| 柳州市| 蒲城县| 襄垣县| 德化县| 大理市| 鄯善县| 广州市| 双柏县| 莫力| 花垣县| 安西县| 沂水县| 西畴县| 山东| 宁安市| 绍兴县| 永定县|