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 相关文章推荐
PJ Blog修改-禁止复制的代码和方法
Oct 25 Javascript
Javascript事件热键兼容ie|firefox
Dec 30 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
Mar 03 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
js控制滚动条缓慢滚动到顶部实现代码
Mar 20 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
Jul 18 Javascript
jQuery无缝轮播图代码
Dec 22 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
微信小程序wx.request实现后台数据交互功能分析
Nov 25 Javascript
vue实现选中效果
Oct 07 Javascript
ant-design-vue中tree增删改的操作方法
Nov 03 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
PHP递归算法的简单实例
2019/02/28 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
python多线程扫描端口(线程池)
2019/09/04 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
学院书画协会部门岗位职责
2013/12/01 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
家长学校培训材料
2014/08/20 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python