国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue2.0s中eventBus實現兄弟組件通信的示例代碼

2019-11-19 15:05:04
字體:
來源:轉載
供稿:網友

vue1.0中,組件之間的通信主要通過vm.$dispatch沿著父鏈向上傳播和用vm.$broadcast向下廣播來實現。然而在vue2.0中,已經廢除了這種用法。

vuex加入后,對組件之間的通信有了更加清晰的操作,對于中大型的項目來說,一開始就把vuex的使用計劃在內是明智的選擇。

然而在一些小型的項目,或者說像我這樣寫到一半才發現vue2.0用不了$.broadcast和$dispatch的人來說,就需要一個比較便捷的解決方法。那么,eventBus的作用就體現出來了。

主要是現實途徑是在要相互通信的兄弟組件之中,都引入一個新的vue實例,然后通過分別調用這個實例的事件觸發和監聽來實現通信和參數傳遞。

這里來看一個簡單的例子:

比如,我們這里有三個組件,main.vue、click.vue、show.vue。click和show是父組件main下的兄弟組件,而且click是通過v-for在父組件中遍歷在了多個列表項中。這里要實現,click組件中觸發點擊事件后,由show組件將點擊的是哪個dom元素console出來。

首先,我們給click組件添加點擊事件

<div class="click" @click.stop.prevent="doClick($event)"></div> 

 想要在doClick()方法中,實現對show組件的通信,我們需要新建一個js文件,來創建出我們的eventBus,我們把它命名為bus.js

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

這樣我們就創建了一個新的vue實例。接下來我們在click組件和show組件中import它。

import Bus from 'common/js/bus.js'; 

接下來,我們在doClick方法中,來觸發一個事件:

methods: {   addCart(event) {   Bus.$emit('getTarget', event.target);    } } 

這里我們在click組件中每次點擊,都會在bus中觸發這個名為'getTarget'的事件,并將點擊事件的event.target順著事件傳遞出去。

接著,我們要在show組件中的created()鉤子中調用bus監聽這個事件,并接收參數:

created() {     Bus.$on('getTarget', target => {       console.log(target);     });    } 

這樣,在每次click組件的點擊事件中,就會把event.target傳遞到show中,并console出來。

所以eventBus的使用還是非常便捷的,但是如果是中大型項目,通信比較復雜,還是建議大家直接使用vuex。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 航空| 溆浦县| 海南省| 天柱县| 佳木斯市| 韩城市| 仙居县| 通许县| 安仁县| 扎鲁特旗| 石柱| 庄河市| 武城县| 徐汇区| 耒阳市| 梨树县| 壤塘县| 惠水县| 易门县| 阿拉尔市| 彩票| 崇阳县| 武汉市| 兖州市| 九寨沟县| 南宁市| 嘉兴市| 营口市| 西贡区| 大埔县| 宝清县| 隆德县| 岱山县| 禄丰县| 绿春县| 河源市| 安阳县| 霍山县| 乌苏市| 黄平县| 襄汾县|