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 原型链学习总结
Oct 29 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
May 15 Javascript
JS实现带提示的星级评分效果完整实例
Oct 30 Javascript
JS防止网页被嵌入iframe框架的方法分析
Sep 13 Javascript
javascript内存分配原理实例分析
Apr 10 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
jquery获取transform里的值实现方法
Dec 12 jQuery
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
Jul 15 Javascript
vue+node 实现视频在线播放的实例代码
Oct 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
PHP数据过滤的方法
2013/10/30 PHP
preg_match_all使用心得分享
2014/01/31 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
php中strtotime函数性能分析
2016/11/20 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
浅谈es6中的元编程
2020/12/01 Javascript
Python基础语法(Python基础知识点)
2016/02/28 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
Django的Modelforms用法简介
2019/07/27 Python
python datetime处理时间小结
2020/04/16 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
公司年会演讲稿范文
2014/01/11 职场文书
小学生秋游活动方案
2014/02/23 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
校园广播稿范文
2015/08/19 职场文书
员工安全责任协议书
2016/03/22 职场文书
SQL Server内存机制浅探
2022/04/06 SQL Server
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python