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 相关文章推荐
javascript闭包的理解和实例
Aug 12 Javascript
基于jQuery的投票系统显示结果插件
Aug 12 Javascript
JavaScript 创建运动框架的实现代码
May 08 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
Jan 27 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
Jun 20 Javascript
JavaScript实现LI列表数据绑定的方法
Aug 04 Javascript
使用jquery.qrcode.js生成二维码插件
Oct 17 Javascript
浅谈ng-zorro使用心得
Dec 03 Javascript
React Native中Mobx的使用方法详解
Dec 04 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
vue实现全屏滚动效果(非fullpage.js)
Mar 07 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
Feb 07 Javascript
用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
需要注意的几个PHP漏洞小结
2012/02/05 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
FireFox JavaScript全局Event对象
2009/06/14 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
javascript简单写的判断电话号码实例
2017/05/24 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
Python常见内置高效率函数用法示例
2018/07/31 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
pandas的resample重采样的使用
2020/04/24 Python
浅谈django channels 路由误导
2020/05/28 Python
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
小学生保护环境倡议书
2014/05/15 职场文书
员工薪酬激励方案
2014/06/13 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
会计出纳岗位职责
2015/03/31 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
给numpy.array增加维度的超简单方法
2021/06/02 Python
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python