vue 任意组件间通信

132 阅读1分钟

csdn.gif

1. 事件中央总线

方式1: 全局事件总线

// 步骤1 1.在main.js文件中定义
new Vue({ 
    el: '#app', 
    router, 
    store, 
    render: h => h(App), 
    beforeCreate(){ 
    Vue.prototype.$bus = this 
    } 
})

// 步骤2 使用
// 传值 (可以在你定义的方法中传值)
this.$bus.$emit('定义名称',值)

// 监听数据 (在mounted监听数据)
this.$bus.$on('定义名称' val=>{})

// 销毁(在beforeDestroy销毁)
this.$bus.$off('定义名称')

方式2:

// 步骤1  在main.js的同级建一个bus.js
 import Vue from "vue" 
 export default new Vue
 
 // 步骤2 在main.js引入
 Vue.prototype.bus = new Vue();
 
 // 步骤3 使用方法
 // 1.引入(传值和监听数据部分都需引入bus.js文件)
import Bus from '@bus.js'

// 传值(我是在beforeDestroy中传值的)
Bus.$emit('定义名称',值)

// 监听数据 (我在beforeCreate 中监听数据)
Bus.$on('定义名称',val=>{})

//销毁(在监听数据页面的 beforeDestroy 中销毁)
Bus.$off('定义名称')


2. 消息订阅和发布

//步骤1 下载插件 pubsub-js
npm i pubsub-js --save

//步骤2 在需要传和监听的页面引入
import pubsub from 'pubsub-js'

//步骤3 发布(传值)
pubsub.publish('xxx',值)

// 订阅(接收)
this.pubId = pubsub.subscribe('xxx',(msgName,data)=>{
 // 注意 msgName的值为你定义的 xxx  data为你真正传过来的 值
})

// 销毁 (在beforeDestroy)
pubsub.unsubscribe(this.pubId)

📢没了,结束了,是不是很简单呐,如有错误,欢迎留言.如有问题,不吝赐教。
📢如果此篇博文对您有帮助,还请动动小手点赞 👍 收藏 ⭐留言 📝呐~,谢谢 ~ ~