全局事件总线(GlobalEventBus)
-
一种组件间通信的方式,适用于任意组件间通信。
-
安装全局事件总线:
new Vue({ ...... beforeCreate() { Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm }, ...... })
-
使用事件总线:
-
接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。
methods(){ demo(data){......} } ...... mounted() { this.$bus.$on('xxxx',this.demo) }
-
提供数据:
this.$bus.$emit('xxxx',数据)
-
-
最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件。
全局事件总线完成兄弟组件通信步骤图
需求:在Student的组件点击按钮,可以在School组件使用
1.若口文件安装全局事件总线
2.School组件挂载后,给this.$bus绑定hello事件,注意回调函数使用箭头(如果先定义函数的话,再调用记得加this)
3.Student组件中 1)给按钮绑定事件 2)定义回调函数并触发this.$bus的”hello“事件
1)
2)
4、最后记得在School毁灭前解绑this.$bus的"hello"事件
注意:组件通讯谁收数据谁就mounted绑定事件
消息订阅与发布(pubsub)
-
一种组件间通信的方式,适用于任意组件间通信。
-
使用步骤:
-
安装pubsub:
npm i pubsub-js
-
引入:
import pubsub from 'pubsub-js'
-
接收数据:A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身。
methods(){ demo(data){......} } ...... mounted() { this.pid = pubsub.subscribe('xxx',this.demo) //订阅消息 }
-
提供数据:
pubsub.publish('xxx',数据)
-
最好在beforeDestroy钩子中,用
PubSub.unsubscribe(pid)
去取消订阅。
-
步骤图
1) npm i pubsub-js
2)引入: import pubsub from 'pubsub-js' 要使用的页面都要导入
3)在收数据的页面(App) 的mounted挂载订阅("checkChange")
4).写好回调函数,注意第一个参数是名字,第二个才是数据
5)在发送数据也导入 pubsub -js 和发布(publish)
6)注意毁灭组件前取消订阅
nextTick
-
语法:
this.$nextTick(回调函数)
-
作用:在下一次 DOM 更新结束后执行其指定的回调。
-
什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行。