Vue 中的事件总线

有时候两个组件也需要通信(非父子关系)。当然Vue2.0提供了Vuex,但在简单的场景下,可以使用一个空的Vue实例作为中央事件总线。

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router/index'

Vue.config.productionTip = false
//在Vue原型上添加$bus, 并将其添加到Vue实例中
Vue.prototype.$bus=new Vue()

new Vue({
  render: h => h(App),
  router,
}).$mount('#app')

需要监听某事件的组件

<script>
   methods:{
      imageLoad(){
         this.$bus.$emit('itemImageLoad')
      }
    }
</script>

需要通过监听此事件并执行JS操作的组件

<script>
  this.$bus.$on('itemImageLoad',()=>{
      this.$refs.scroll.refresh()
    })
</script>

   用 this.$bus.$emit('事件名称',参数) 提交事件
   用 this.$bus.$on('事件名称',function(参数){
})接收事件并执行回调函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、 组件component 1. 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一。组...
    饥人谷_Leonardo阅读 6,115评论 0 18
  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 4,863评论 0 1
  • vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢?首...
    云翼飞阅读 3,576评论 0 0
  • 本文章是我最近在公司的一场内部分享的内容。我有个习惯就是每次分享都会先将要分享的内容写成文章。所以这个文集也是用来...
    Awey阅读 13,121评论 4 67
  • 前言 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引...
    用技术改变世界阅读 6,516评论 1 3