详解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


相关推荐: Python文件流缓冲机制_IO性能解析【教程】  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  怎样使用JSON进行数据交换_它有什么限制  公司网站制作价格怎么算,公司办个官网需要多少钱?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  英语简历制作免费网站推荐,如何将简历翻译成英文?  LinuxCD持续部署教程_自动发布与回滚机制  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何确保西部建站助手FTP传输的安全性?  Linux安全能力提升路径_长期防护思维说明【指导】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  如何快速辨别茅台真假?关键步骤解析  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  JS去除重复并统计数量的实现方法  EditPlus中的正则表达式实战(6)  BootStrap整体框架之基础布局组件  企业网站制作这些问题要关注  如何用西部建站助手快速创建专业网站?  Laravel如何实现用户密码重置功能?(完整流程代码)  Python面向对象测试方法_mock解析【教程】  如何在IIS服务器上快速部署高效网站?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Windows Hello人脸识别突然无法使用  lovemo网页版地址 lovemo官网手机登录  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Mybatis 中的insertOrUpdate操作  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  jQuery validate插件功能与用法详解  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  专业商城网站制作公司有哪些,pi商城官网是哪个?  JS碰撞运动实现方法详解  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  浅谈javascript alert和confirm的美化  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  JavaScript实现Fly Bird小游戏  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  使用spring连接及操作mongodb3.0实例  Laravel如何使用Telescope进行调试?(安装和使用教程)  EditPlus中的正则表达式 实战(1)  打造顶配客厅影院,这份100寸电视推荐名单请查收  免费视频制作网站,更新又快又好的免费电影网站?  JS弹性运动实现方法分析  如何确保FTP站点访问权限与数据传输安全?