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 相关文章推荐
利用jquery写的左右轮播图特效
Feb 12 Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 Javascript
js运动动画的八个知识点
Mar 12 Javascript
巧用jQuery选择器提高写表单效率的方法
Aug 19 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
May 12 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
Feb 22 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
puppeteer实现html截图的示例代码
Jan 10 Javascript
策略模式实现 Vue 动态表单验证的方法
Sep 16 Javascript
vue $mount 和 el的区别说明
Sep 11 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
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
jQuery表单验证简单示例
2016/10/17 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
Django的session中对于用户验证的支持
2015/07/23 Python
Python批量查询域名是否被注册过
2017/06/21 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
python中return不返回值的问题解析
2020/07/22 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
新护士岗前培训制度
2014/02/02 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
关于美容院的活动方案
2014/08/14 职场文书
未中标通知书
2015/04/17 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技