Vue组件通信之Bus的具体使用


Posted in Javascript onDecember 28, 2017

关于组件通信我相信小伙伴们肯定也都很熟悉,就不多说了,对组件通信还不熟悉的小伙伴移步这里。

在vue2.0中 $dispatch 和 $broadcast 已经被弃用。官方文档中给出的解释是:

因为基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会变得越来越脆弱。这种事件方式确实不太好,我们也不希望在以后让开发者们太痛苦。并且$dispatch 和 $broadcast 也没有解决兄弟组件间的通信问题。

官方推荐的状态管理方案是 Vuex。不过如果项目不是很大,状态管理也没有很复杂的话,使用 Vuex 有种杀鸡用牛刀的感觉,当然,这也是要根据自己的需求来的,只是建议。

vue官方文档中有这样一个定义:非父子组件的通信,内容很少,如下:

Vue组件通信之Bus的具体使用

其实关于这个非父子组件通信的demo还是有的,它藏在了$dispatch 和 $broadcast的迁移文档中,有兴趣的小伙伴可以点击进去查看。文档中的建议就是:

对于$dispatch 和 $broadcast最简单的升级方式就是:通过使用事件中心,允许组件自由交流,无论组件处于组件树的哪一层。由于 Vue 实例实现了一个事件分发接口,你可以通过实例化一个空的 Vue 实例来实现这个目的。
这个集中式的事件中间件就是 Bus。我习惯将bus定义到全局:

app.js

var eventBus = {
 install(Vue,options) {
  Vue.prototype.$bus = vue
 }
};
Vue.use(eventBus);

然后在组件中,可以使用$emit, $on, $off 分别来分发、监听、取消监听事件:

分发事件的组件

// ...
methods: {
 todo: function () {
 this.$bus.$emit('todoSth', params); //params是传递的参数
 //...
 }
}

监听的组件

// ...
created() {
 this.$bus.$on('todoSth', (params) => { //获取传递的参数并进行操作
  //todo something
 })
},
// 最好在组件销毁前
// 清除事件监听
beforeDestroy () {
 this.$bus.$off('todoSth');
},

如果需要监听多个组件,只需要更改 bus 的 eventName:

// ...
created() {
 this.$bus.$on('firstTodo', this.firstTodo);
 this.$bus.$on('secondTodo', this.secondTodo);
},
// 清除事件监听
beforeDestroy () {
 this.$bus.$off('firstTodo', this.firstTodo);
 this.$bus.$off('secondTodo', this.secondTodo);
},

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Html中JS脚本执行顺序简单举例说明
Jun 19 Javascript
文本域光标操作的jQuery扩展分享
Mar 10 Javascript
JS实现从表格中动态删除指定行的方法
Mar 31 Javascript
七个不允许错过的jQuery小技巧
Dec 21 Javascript
JavaScript动态生成二维码图片
Apr 20 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
Dec 19 Javascript
JavaScript中捕获与冒泡详解及实例
Feb 03 Javascript
vue实现留言板todolist功能
Aug 16 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
Dec 03 Javascript
JavaScript模板引擎原理与用法详解
Dec 24 Javascript
微信小程序实现签到弹窗动画
Sep 21 Javascript
微信小程序实现简单的select下拉框
Nov 23 Javascript
基于Swiper实现移动端页面图片轮播效果
Dec 28 #Javascript
Swiper自定义分页器使用详解
Dec 28 #Javascript
swiper自定义分页器使用方法详解
Sep 14 #Javascript
JavaScript实现数值自动增加动画
Dec 28 #Javascript
详解如何优雅地在React项目中使用Redux
Dec 28 #Javascript
ionic3实战教程之随机布局瀑布流的实现方法
Dec 28 #Javascript
JS实现带动画的回到顶部效果
Dec 28 #Javascript
You might like
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
深入理解Node module模块
2018/03/26 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
Python用模块pytz来转换时区
2016/08/19 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
Python eval函数介绍及用法
2020/11/09 Python
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
教师节促销方案
2014/03/22 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
先进个人自荐书
2015/03/06 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
消防隐患整改通知书
2015/04/22 职场文书
中学教师教学工作总结
2015/08/13 职场文书