vue 兄弟组件间传值 EventBus
大家或许都听说EventBus,或者说或多或少都了解过,他可以在任何两个组件中进行传值,不局限于父子、祖孙或是兄弟组件,也可以说他是一种发布——订阅的设计模式。我将使用拆分为五个步骤:创建、引入、监听、递交、销毁1、创建// 创建一个EventBus.js文件// 引入import Vue from 'vue'// 创建实例vueconst EventBus = new Vue()// 导出exp
大家或许都听说EventBus,或者说或多或少都了解过,他可以在任何两个组件中进行传值,不局限于父子、祖孙或是兄弟组件,也可以说他是一种发布——订阅的设计模式。
我将使用拆分为五个步骤:创建、引入、监听、递交、销毁
1、创建
// 创建一个EventBus.js文件
// 引入
import Vue from 'vue'
// 创建实例
const EventBus = new Vue()
// 导出
export default EventBus
2、 引入 有两种方法
1. 使用import引入
import EventBus from '../EventBus'
2.使用Vue原型链引入
// 在 src 的 main.js 中,加上以下代码
// 引入第一步创建好的 EventBus
import EventBus from './EventBus'
// 这个方式可以在任何组件里直接用 this.$EventBus 调用
Vue.prototype.$EventBus = EventBus
// 也可以直接这样使用,不需要第一步的创建
import Vue from 'vue'
Vue.prototype.$EventBus = new Vue()
3、监听
要使用监听方法,只要调用EventBus下的$on方法 (使用Vue原型链引入)
(使用Vue原型链引入)
<template>
<div>
<h3>页面A</h3>
<router-link to="/b"> 跳转B页面 </router-link>
</div>
</template>
<script>
export default {
created () {
console.log('----A页面监听事件----')
// 使用Vue原型链引入
this.$EventBus.$on('getNum', (num) => {
console.log('num', num)
})
}
}
</script>
4、 递交
只要调用EventBus下的$emit方法
(使用Vue原型链引入)
<template>
<div>
<h3>B页面</h3>
<router-link to="/a"> 跳转A页面 </router-link>
</div>
</template>
<script>
export default {
created () {
console.log('----B页面递交事件----')
const num = 2
// 使用Vue原型链引入
this.$EventBus.$emit('getNum', num)
}
}
</script>
5、销毁
如果不对监听事件销毁,会导致了内存泄露
应该在调用 方法()页面的生命周期中添加$off()
// a.vue 添加$off方法,防止内存泄露
beforeDestroy () {
console.log('----A页面销毁监听事件----')
this.$EventBus.$off('getNum')
}
完整代码
a页面
<template>
<div>
<h3>页面A</h3>
<router-link to="/b"> 跳转B页面 </router-link>
</div>
</template>
<script>
export default {
created () {
console.log('----A页面监听事件----')
// 使用Vue原型链引入
this.$EventBus.$on('getNum', (num) => {
console.log('num', num)
})
},
beforeDestroy () {
console.log('----A页面销毁监听事件----')
// 使用Vue原型链引入
this.$EventBus.$off('getNum')
}
}
</script>
b页面
<template>
<div>
<h3>B页面</h3>
<router-link to="/a"> 跳转A页面 </router-link>
</div>
</template>
<script>
export default {
created () {
console.log('----B页面递交事件----')
const num = 2
// 使用Vue原型链引入
this.$EventBus.$emit('getNum', num)
}
}
</script>
创建eventBus->引入同一个实例->绑定(订阅)监听事件->递交(发布)事件->销毁监听事件
更多推荐
所有评论(0)