详解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 相关文章推荐
表单的焦点顺序tabindex和对应enter键提交
Jan 04 Javascript
js返回上一页并刷新的多种实现方法
Feb 26 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
解决js图片加载时出现404的问题
Nov 30 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
Apr 17 Javascript
深入理解setTimeout函数和setInterval函数
May 20 Javascript
Bootstrap模块dropdown实现下拉框响应
May 22 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
Jan 10 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
React通过redux-persist持久化数据存储的方法示例
Feb 14 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自定义函数返回多个值
2006/11/26 PHP
认识并使用PHP超级全局变量
2010/01/26 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
php之可变函数的实例详解
2017/09/13 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
python optparse模块使用实例
2015/04/09 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python opencv读mp4视频的实例
2018/12/07 Python
Python如何读取文件中图片格式
2020/01/13 Python
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
马来西亚网上购物:Youbeli
2018/03/30 全球购物
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
小学新学期教师寄语
2014/01/18 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
学习教师法的心得体会
2014/09/03 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
工伤死亡理赔协议书
2014/10/20 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
结婚主持人致辞
2015/07/28 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL