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

发布时间 - 2026-01-11 01:16:18    点击率:

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

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


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

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


假设 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)来做中央事件总线更加清晰也易于管理。

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


# vue非父子组件通信  # vuex  # 非父子组件通信  # vue2  # vue2.0父子组件及非父子组件之间的通信方法  # vue2利用Bus.js如何实现非父子组件通信详解  # Vue非父子组件通信详解  # vue中的event bus非父子组件通信解析  # vue非父子组件通信问题及解决方法  # vue3 非父子组件通信详解  # Vue组件通信中非父子组件传值知识点总结  # vue中非父子组件的通信你了解吗  # Vue非父子组件之间的通信方式详解  # 官网  # 而用  # 自己的  # 几个  # 让你  # 有个  # 多个  # 不需要  # 都能  # 一脸  # 要在  # 很高  # 很简单  # 看完  # 自定义  # 会说  # 这篇文章  # 来做  # 别忘了  # 绑定 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  手机软键盘弹出时影响布局的解决方法  如何在阿里云域名上完成建站全流程?  Linux网络带宽限制_tc配置实践解析【教程】  如何挑选优质建站一级代理提升网站排名?  详解Oracle修改字段类型方法总结  如何快速使用云服务器搭建个人网站?  如何快速搭建高效香港服务器网站?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  如何在宝塔面板中修改默认建站目录?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何在IIS服务器上快速部署高效网站?  昵图网官网入口 昵图网素材平台官方入口  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Android实现代码画虚线边框背景效果  如何在万网ECS上快速搭建专属网站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  JS经典正则表达式笔试题汇总  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  如何用PHP工具快速搭建高效网站?  JavaScript中的标签模板是什么_它如何扩展字符串功能  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何快速生成高效建站系统源代码?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  西安专业网站制作公司有哪些,陕西省建行官方网站?  Android仿QQ列表左滑删除操作  网站优化排名时,需要考虑哪些问题呢?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  C++时间戳转换成日期时间的步骤和示例代码  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?