消息订阅与发布pubsub

消息订阅与发布是使用第三方库pubsub-js,实现任意组件间通信

pub:publish 发布

sub:subscribe 订阅

安装pubsub

<pre style="margin: 0px; padding: 0px; transition-duration: 0.2s; transition-property: background, font-size, border-color, border-radius, border-width, padding, margin, color; overflow: auto; font-family: "Courier New", serif; font-size: 12px; overflow-wrap: break-word;">npm i pubsub-js</pre>

使用pubsub

先引入pubsub,再使用

订阅消息(接收数据)

消息订阅与发布是使用第三方库pubsub-js,实现任意组件间通信

pub:publish 发布

sub:subscribe 订阅

安装pubsub

使用pubsub

先引入pubsub,再使用

订阅消息(接收数据)

<template>
    <div class="school">
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </div>
</template>

<script>
    **//引入pubsub
 import pubsub from 'pubsub-js'** export default {
        name:'School',
        data() { return {
                name:'幼儿园大班',
                address:'上海',
            }
        },
        mounted() { //订阅消息,会返回一个订阅的ID,取消订阅时需要用到
            //第一个参数为消息名,这里是hello
            //第二个参数是回调函数,这里是一个匿名的,用于接收消息
            this.pubId = **pubsub.subscribe**('hello',(msgName,data)=>{
                console.log(this)//undefined,因为是第三方的库
 console.log('有人发布了hello消息,hello消息的回调执行了',msgName,data)
            })
        },

        beforeDestroy() { //组件销毁前,取消订阅
 **pubsub.unsubscribe(this****.pubId)**
        },
    } </script></pre>

发布消息(提供数据)

<template>
    <div class="student">
        <h2>学生姓名:{{name}}</h2>
        <h2>学生性别:{{sex}}</h2>
        <button @click="sendStudentName">把学生名给School组件</button>
    </div>
</template>

<script>
    **//引入pubsub
 import pubsub from 'pubsub-js'** export default {
        name:'Student',
        data() { return {
                name:'张三',
                sex:'男',
            }
        },

        methods: {
            sendStudentName(){ **//发布消息,hello是消息名,后面的是数据
 pubsub.publish('hello',666****)**
            }
        },
    } </script></pre>
发布消息(提供数据)
<!-- Student组件 -->
<template>
    <div class="student">
        <h2>学生姓名:{{name}}</h2>
        <h2>学生性别:{{sex}}</h2>
        <button @click="sendStudentName">把学生名给School组件</button>
    </div>
</template>

<script>
    //引入pubsub
    import pubsub from 'pubsub-js'
    export default {
        name:'Student',
        data() {
            return {
                name:'张三',
                sex:'男',
            }
        },
    
        methods: {
            sendStudentName(){
                //发布消息,hello是消息名,后面的是数据
                pubsub.publish('hello',666)
            }
        },
    }
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容