一种组件间通信方式
任意组件间通信,适配Vue、Angular、React等库
消息订阅与发布 | 订阅报纸 |
---|---|
订阅消息:确定订阅消息的名称 | 确定订阅哪种类型的报纸 |
发布消息:根据订阅消息的名称发布内容 | 邮递员根据报纸类型派送报纸 |
npm i pubsub-js
import pubsub from "pubsub-js"
mounted(){ this.pid = pubsub.subscribe("自定义事件",回调函数) }
pubsub.publish("自定义事件",数据)
beforeDestroy(){ pubsub.unsubscribe(pid) }
需求:通过消息订阅与发布实现组件间通信(School组件接收来自Student组件的数据)
School组件
<template>
<div>
<p>学校名称:{{name}}p>
<p>学校地址:{{adress}}p>
<p>School组件订阅的消息是:{{sName}}p>
div>
template>
<script>
//引入pubsub
import pubsub from "pubsub-js";
export default {
name:"School",
data(){
return {
name:"喵喵学院",
adress:"郑州",
sName:""
}
},
mounted(){
//消息订阅
this.pid = pubsub.subscribe("getName",(msgName,data)=>{
this.sName=data;
})
},
//取消订阅
beforeDestroy(){
pubsub.unsubsrcibe(pid);
}
}
script>
Stundet组件
<template>
<div>
<p>学生性别是:{{sex}}p>
<button @click="sendMsg">点击向School发布消息button>
div>
template>
<script>
//引入pubsub
import pubsub from "pubsub-js";
export default {
name:"Student",
data(){
return {
name:"憨瓜",
sex:"男"
}
},
methods:{
sendMsg(){
//发布消息
pubsub.publish("getName",this.name)
}
}
}
script>
运行结果
pubsub.subscribe("自定义事件",回调函数)
回调函数接收两个参数
① 第一个参数输出的是自定义事件的名称
② 第二个参数为接收数据
类似于定时器,每次调用订阅消息都会收到一个新的id,因此需要声明一个变量接收
this.pid = pubsub.subscribe("自定义事件",回调函数)
需要取消订阅消息时
beforeDestroy(){ pubsub.unsubsrcibe(pid); }