方式1: 全局事件总线
1.在main.js文件中定义
1
2
3
4
5
6
7
8
9
|
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
1
2
|
import Vue from "vue" export default new Vue |
2.在main.js引入
// 事件中央总线传值
1
|
Vue.prototype.bus = new Vue(); |
3.使用方法
// 1.引入(传值和监听数据部分都需引入bus.js文件)
import Bus from ‘@bus.js’
// 传值(我是在beforeDestroy中传值的)
Bus.$emit(‘定义名称’,值)
// 监听数据 (我在beforeCreate 中监听数据)
Bus.$on(‘定义名称’,val=>{})
//销毁(在监听数据页面的 beforeDestroy 中销毁)
Bus.$off(‘定义名称’)
扩展: 还可以使用消息订阅与发布的方式 实现任意组件间的传值
方法:
// 下载插件 pubsub-js
npm i pubsub-js –save
// 在需要传和监听的页面引入
import pubsub from ‘pubsub-js’
// 发布(传值)
pubsub.publish(‘xxx’,值)
// 订阅(接收)
this.pubId = pubsub.subscribe(‘xxx’,(msgName,data)=>{
// 注意 msgName的值为你定义的 xxx data为你真正传过来的 值
})
// 销毁 (在beforeDestroy)
pubsub.unsubscribe(this.pubId)