vue2.0s中eventBus实现兄弟组件通信的示例代码


Posted in Javascript onOctober 25, 2017

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。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习从实践开始之jQuery插件开发 菜单插件开发
May 03 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
select标记美化--JS式插件、后期加载
Apr 01 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
Aug 12 Javascript
可自己添加html的伪弹出框实现代码
Sep 08 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
微信小程序开发之IOS和Android兼容的问题
Sep 26 Javascript
js将键值对字符串转为json字符串的方法
Mar 30 Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
详解CocosCreator消息分发机制
Apr 16 Javascript
如何使用vue3打造一个物料库
May 08 Vue.js
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
Oct 25 #Javascript
JS获取当前地理位置的方法
Oct 25 #Javascript
JavaScript 异步调用
Oct 25 #Javascript
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 #Javascript
通过js控制时间,一秒一秒自己动的实例
Oct 25 #Javascript
js 显示日期时间的实例(时间过一秒加1)
Oct 25 #Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
Oct 25 #Javascript
You might like
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
详解vuex的简单使用
2018/03/12 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
教师通用专业自荐书范文
2014/02/11 职场文书
葬礼司仪主持词
2014/03/31 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers