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 实用小技巧
Apr 07 Javascript
表单切换,用回车键替换Tab健(不支持IE)
Jul 20 Javascript
js 使用form表单select类实现级联菜单效果
Dec 19 Javascript
file模式访问网页时iframe高度自适应解决方案
Jan 16 Javascript
js获取html页面节点方法(递归方式)
Dec 13 Javascript
在Google 地图上实现做的标记相连接
Jan 05 Javascript
javascript实现在线客服效果
Jul 15 Javascript
JavaScript实现显示函数调用堆栈的方法
Apr 21 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
Dec 08 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 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中memcache的应用
2013/06/18 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
Python3基础之基本运算符概述
2014/08/13 Python
python绘制双柱形图代码实例
2017/12/14 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
Python sorted对list和dict排序
2020/06/09 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
九州传奇上机题
2014/07/10 面试题
汇源肾宝广告词
2014/03/20 职场文书
公司经理任命书
2014/06/05 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书