p84-p85 全局事件总线
(1)$on
在Vue.prototype上
(2)bus:总线、全局事件总线,所有的vc 所有的vm,都能访问它(通过原型链)
(3)$bus
:为了迎合vue所以这样设计
new Vue({
el:'#app',
render: h => h(App),
beforeCreate() {
Vue.prototype.$bus = this //安装全局事件总线 $bus
},
})
消息订阅与发布,挺好的,但是在vue里面用的并不多,更推荐vue的组件。
使用第三方库进行发布订阅:
npm i pubsub-js
import pubsub from 'pubsub-js'
mounted() {
// console.log('School',this)
/* this.$bus.$on('hello',(data)=>{
console.log('我是School组件,收到了数据',data)
}) */
this.pubId = pubsub.subscribe('hello', (msgName, data) => { // 必须是箭头函数
console.log(this)
console.log('有人发布了hello消息,hello消息的回调执行了',msgName, data)
})
},
beforeDestroy() {
// this.$bus.$off('hello')
pubsub.unsubscribe(this.pubId)
},
methods: {
sendStudentName(){
// this.$bus.$emit('hello',this.name)
pubsub.publish('hello',666)
}
},