• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >vue > 详解Vue 非父子组件通信方法(非Vuex)

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-30

本文主要包含vue vuex,vuex结合vue resource,vue2.0 vuex,vue vuex vue router,vuex vue router等相关知识,希望在学习及工作中可以帮助到您

一提到两个非父子组件通信方法,有经验的 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()
 }
})
</div>

bb 组件内调用事件触发↓

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

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

</div>

aa 组件内调用事件接收↓

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

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

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

</div>

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

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

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

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

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

</div>

您可能想查找下面的文章:

  • 详解Vue 非父子组件通信方法(非Vuex)
  • 详解Vue中状态管理Vuex
  • Vuex和前端缓存的整合策略详解
  • vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
  • Vuex简单入门
  • 详解vue组件化开发-vuex状态管理库
  • Vue.js实战之使用Vuex + axios发送请求详解
  • Vue.js实战之Vuex的入门教程
  • 如何快速上手Vuex
  • 关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库

相关文章

  • 2017-05-30详解VueJs前后端分离跨域问题
  • 2017-05-30vueJS简单的点击显示与隐藏的效果【实现代码】
  • 2018-11-02VUE 移动端适配:VUE-CLI 3 添加 flexible 及 px2rem
  • 2017-05-30vue拦截器Vue.http.interceptors.push使用详解
  • 2017-05-30windows下vue-cli导入bootstrap样式
  • 2017-05-30VUEJS实战之修复错误并且美化时间(2)
  • 2017-05-30Vue监听数组变化源码解析
  • 2017-05-30vue动态生成dom并且自动绑定事件
  • 2017-05-30windows下vue-cli及webpack搭建安装环境
  • 2017-05-30vue组件如何被其他项目引用

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • vue父子组件的数据传递示例
    • vue.js树形组件之删除双击增加分支实例代码
    • Vue.js实战之组件的进阶
    • 详解Vue用axios发送post请求自动set cookie
    • 简单实现Vue的observer和watcher
    • Vue中添加过渡效果的方法
    • vue项目优化
    • Vue.js第四天学习笔记(组件)
    • vue.js利用defineProperty实现数据的双向绑定
    • Vue.JS入门教程之自定义指令

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有