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 form 验证函数 弹出对话框形式
Jun 23 Javascript
浅谈javascript中的作用域
Apr 07 Javascript
javascript学习笔记(五) Array 数组类型介绍
Jun 19 Javascript
JS中完美兼容各大浏览器的scrolltop方法
Apr 17 Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 Javascript
深入浅析AngularJS和DataModel
Feb 16 Javascript
AngularJS入门教程之Cookies读写操作示例
Nov 02 Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 Javascript
vue获取当前激活路由的方法
Mar 17 Javascript
Angular父组件调用子组件的方法
Apr 02 Javascript
JavaScript生成指定范围随机数和随机序列的方法
May 05 Javascript
javascript实现弹幕墙效果
Nov 28 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和XSL stylesheets转换XML文档
2006/10/09 PHP
php生成随机密码的三种方法小结
2010/09/04 PHP
php curl选项列表(超详细)
2013/07/01 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
Python里隐藏的“禅”
2014/06/16 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
小学生一分钟演讲稿
2014/08/26 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
先进个人推荐材料
2014/12/29 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
Go语言基础map用法及示例详解
2021/11/17 Golang
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers