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 相关文章推荐
javascript各种复制代码收集
Sep 20 Javascript
JS 动态加载脚本的4种方法
May 05 Javascript
JavaScript 动态创建VML的方法
Oct 14 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
Jun 08 Javascript
让元素在网页中可拖动示例代码
Aug 13 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
js实现分割上传大文件
Mar 09 Javascript
基于javascript制作微博发布栏效果
Apr 04 Javascript
VUE前端cookie简单操作
Oct 17 Javascript
Angular8 Http拦截器简单使用教程
Aug 20 Javascript
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
JS精髓原型链继承及构造函数继承问题纠正
Jun 16 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
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
js中url对象化管理分析
2017/12/29 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
Python的高级Git库 Gittle
2014/09/22 Python
python多进程共享变量
2016/04/06 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
机械工程师求职自我评价
2013/09/23 职场文书
2014自荐信的写作技巧
2014/01/28 职场文书
美国留学经济担保书
2014/05/20 职场文书
建筑工地质量标语
2014/06/12 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
新学期标语
2014/06/30 职场文书
放弃继承权公证书
2015/01/23 职场文书
党员承诺书格式范文
2015/04/28 职场文书
党课主持词大全
2015/06/30 职场文书
如何用python绘制雷达图
2021/04/24 Python
Css预编语言及区别详解
2021/04/25 HTML / CSS