消息订阅与发布
消息订阅与发布,也是组件间的一种通信方式,适用于任何组件间通信。看下面具体的例子。父组件:App。<template><div class="app"><Company/><Employee/></div></template><script>import Company from "./components/Co
·
消息订阅与发布,也是组件间的一种通信方式,适用于任何组件间通信。
看下面具体的例子。
- 父组件:App。
<template>
<div class="app">
<Company/>
<Employee/>
</div>
</template>
<script>
import Company from "./components/Company.vue";
import Employee from "./components/Employee.vue";
export default {
components:{
Company,
Employee
}
}
</script>
<style>
.app{
background: gray;
padding: 5px;
}
.btn{
margin-left:10px;
line-height: 30px;
background: ivory;
border-radius: 5px;
}
</style>
- 子组件:Company和Employee。
<template>
<div class="company">
<h2>公司名称:{{name}}</h2>
<h2>公司地址:{{address}}</h2>
<button @click="sendMessage">点我发送</button>
</div>
</template>
<script>
import pubsub from "pubsub-js";
export default {
name:"Company",
data(){
return {
name:"五哈技术有限公司",
address:"上海宝山"
}
},
methods:{
sendMessage(){
console.log("Company组件发送数据:",this.name);
pubsub.publish("demo",this.name);
}
}
}
</script>
<style scoped>
.company{
background: orange;
background-clip: content-box;
padding: 10px;
}
</style>
<template>
<div class="employee">
<h2>员工姓名:{{name}}</h2>
<h2>员工年龄:{{age}}</h2>
</div>
</template>
<script>
import pubsub from "pubsub-js";
export default {
name:"Employee",
data(){
return {
name:"张三",
age:25
}
},
mounted(){
this.pubId = pubsub.subscribe("demo",(msgName,data) => {
console.log(`Employee组件监听${msgName},接收数据:${data}`);
})
},
beforeDestroy() {
pubsub.unsubscribe(this.pubId);
}
}
</script>
<style scoped>
.employee{
background: skyblue;
background-clip: content-box;
padding: 10px;
}
</style>
- 入口文件:main.js
import Vue from 'vue';
import App from './App.vue';
Vue.config.productionTip = false;
new Vue({
el:"#app",
render: h => h(App)
})
父组件App,子组件Company和Employee。
子组件Company和Employee之间通过消息订阅与发布进行数据传递。
其中,
- Company引入pubsub-js,通过
pubsub.publish()
发布消息。 - Employee引入pubsub-js,通过
pubsub.subscribe()
订阅消息,通过pubsub.unsubscribe()
取消订阅。
更多推荐
已为社区贡献19条内容
所有评论(0)