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实现单继承和多继承的简单方法
Mar 29 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
Dec 15 Javascript
javascript使用call调用微信API
Dec 15 Javascript
JS中with的替代方法与String中的正则方法详解
Dec 23 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 Javascript
javascript函数的节流[throttle]与防抖[debounce]
Nov 15 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
Mar 08 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
详解vue 中 scoped 样式作用域的规则
Sep 14 Javascript
vue 组件基础知识总结
Jan 26 Vue.js
Javascript webpack动态import
Apr 19 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
JavaScript URL参数读取改进版
2009/01/16 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
django接入新浪微博OAuth的方法
2015/06/29 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
python九九乘法表的实例
2017/09/26 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Python双链表原理与实现方法详解
2020/02/22 Python
python程序需要编译吗
2020/06/19 Python
大学班级学风建设方案
2014/05/01 职场文书
专家推荐信模板
2014/05/09 职场文书
煤矿安全生产标语
2014/06/06 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
爱心助学感谢信
2015/01/21 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle