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向asp.net Mvc传递复杂json数据-ModelBinder篇
May 07 Javascript
javascript温习的一些笔记 基础常用知识小结
Jun 22 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
JS实现简单的键盘打字的效果
Apr 24 Javascript
js图片轮播特效代码分享
Sep 07 Javascript
javascript基础知识
Jun 07 Javascript
如何使用headjs来管理和异步加载js
Nov 29 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
关于javascript sort()排序你可能忽略的一点理解
Jul 18 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
Jan 30 Javascript
用vue 实现手机触屏滑动功能
May 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下通过POST还是GET来传值
2008/06/05 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
nodejs中实现sleep功能实例
2015/03/24 NodeJs
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
200行自定义python异步非阻塞Web框架
2017/03/15 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
Python requests上传文件实现步骤
2020/09/15 Python
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
商务考察邀请函范文
2014/01/21 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
法制宣传标语集锦
2014/06/25 职场文书
中秋晚会活动方案
2014/08/31 职场文书
高中历史教学反思
2016/02/19 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL