1.订阅消息∶消息名
2.发布消息︰消息内容
消息订阅与发布的工作流程:
(A是订阅者,B是发布者)
一种组件间通信的方式,适用于任意组件间通信
。
这里使用pubsub-js
库。
npm i pubsub-js
import pubsub from 'pubsub-js'
mounted() {
// 订阅消息,编写回调函数
this.pubsubId = pubsub.subscribe('hello',(msgName,data)=>{
console.log(`有人发布了${msgName}消息,消息内容是:${data}`)
})
},
sendStudentName() {
// 发布事件
pubsub.publish('hello',666)
}
beforeDestroy() {
pubsub.unsubscribe(this.pubsubId)
}
School.vue
<template>
<div class="demo">
<h2>学校名字:{{ name }}h2>
<h2 class="fonty">地址:{{ address }}h2>
<hr>
div>
template>
<script>
import pubsub from 'pubsub-js'
export default {
name: 'SchoolVue',
data() {
return {
name: "nefu",
address: "哈尔滨",
};
},
mounted() {
// 订阅消息,编写回调函数
this.pubsubId = pubsub.subscribe('hello',(msgName,data)=>{
console.log(`有人发布了${msgName}消息,消息内容是:${data}`)
})
},
beforeDestroy() {
pubsub.unsubscribe(this.pubsubId)
}
}
script>
<style scoped lang="less">
.demo{
background: skyblue;
}
style>
Student.vue
<template>
<div class="demo">
<h2>名字:{{ name}}h2>
<h2>性别:{{ sex }}h2>
<button @click="sendStudentName">把学生姓名给schoolbutton>
<hr>
div>
template>
<script>
import pubsub from 'pubsub-js'
export default {
name:'StudentVue',
data() {
console.log(this)
return {
name:"yang123",
sex:"男"
}
},
methods: {
sendStudentName() {
// 发布事件
pubsub.publish('hello',666)
}
}
}
script>
<style scoped>
.demo{
background: lightsalmon;
}
style>
效果: