详解Vue 非父子组件通信方法(非Vuex)


Posted in Javascript onMay 24, 2017

一提到两个非父子组件通信方法,有经验的 coder 肯定会说用 Vuex 啊,我个人建议不要为了用 Vuex 而用 Vuex,除非你的项目很大,耦合度很高,需要大量的储存一些 data,组件之间通信频繁。当然还是要根据自己的业务场景的来决定,总之还是那句话,不要为了用 Vuex 而用 Vuex!

Vue 官网介绍了非父子组件通信方法:

详解Vue 非父子组件通信方法(非Vuex)

不过官网说的太简单了,新手看完估计还是一脸懵逼。还有这个空的 Vue 实例放到哪里合适也值得商榷。

这篇文章的目的就是用一个简单的例子让你明白如何用 Bus ? 来进行通信:

详解Vue 非父子组件通信方法(非Vuex)

假设 bb 组件里面有个按钮,点击按钮,把 123 传递给 aa 组件

// 根组件(this.$root)
new Vue({
 el: '#app',
 router,
 render: h => h(App),
 data: {
  // 空的实例放到根组件下,所有的子组件都能调用
  Bus: new Vue()
 }
})

bb 组件内调用事件触发↓

<button @click="submit">提交<button>

methods: {
  submit() {
   // 事件名字自定义,用不同的名字区别事件
   this.$root.Bus.$emit('eventName', 123)
  }
 }

aa 组件内调用事件接收↓

// 当前实例创建完成就监听这个事件
 created(){
  this.$root.Bus.$on('eventName', value => {
   this.print(value)
  })
 },

 methods: {
  print(value) {
   console.log(value)
  }
 },

 // 在组件销毁时别忘了解除事件绑定
 beforeDestroy() {
   this.$root.Bus.$off('eventName')
 },

这样就可以了,是不是很简单?

问题一:如果有多个组件组件需要通信,是不是要在根组件上多建几个 Bus?
答:不需要的,只要保证事件名 (eventName)不一样就行了。

问题二:为什么要弄个 Bus?直接 this.$root.$on、this.$root.$emit 不更简单粗暴?

答:按照文档上的说法是专门用一个空的 Vue 实例(Bus)来做中央事件总线更加清晰也易于管理。

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

Javascript 相关文章推荐
jQuery 表单验证扩展代码(二)
Oct 20 Javascript
jQuery判断iframe中元素是否存在的方法
May 11 Javascript
javascript从image转换为base64位编码的String
Jul 29 Javascript
JavaScript encodeURI 和encodeURIComponent
Dec 04 Javascript
jquery validate表单验证的基本用法入门
Jan 18 Javascript
JS表格组件神器bootstrap table详解(强化版)
May 26 Javascript
Vue表单验证插件Vue Validator使用方法详解
Apr 07 Javascript
vue2.0 循环遍历加载不同图片的方法
Mar 06 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
Mar 20 Javascript
JS加密插件CryptoJS实现AES加密操作示例
Aug 16 Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 Javascript
iview form清除校验状态的实现
Sep 19 Javascript
微信小程序 支付功能(前端)的实现
May 24 #Javascript
微信小程序 选项卡的简单实例
May 24 #Javascript
JS回调函数基本定义与用法实例分析
May 24 #Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
May 24 #jQuery
详解前后端分离之VueJS前端
May 24 #Javascript
JQuery Ajax 异步操作之动态添加节点功能
May 24 #jQuery
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
May 24 #Javascript
You might like
php 表单验证实现代码
2009/03/10 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
js 字符串操作函数
2009/07/25 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
python多线程抓取天涯帖子内容示例
2014/04/03 Python
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
淘宝中秋节活动方案
2014/01/31 职场文书
班长自荐书范文
2014/02/11 职场文书
毕业评语大全
2014/05/04 职场文书
保护环境建议书300字
2014/05/13 职场文书
党员四风剖析材料
2014/08/27 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
写给女朋友的保证书
2015/05/09 职场文书
求职意向书范本
2015/05/11 职场文书
高一语文教学反思
2016/02/16 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书