问题:
B页面为多个页面可以进入,
B进行删除操作后this.$router.go(-1)返回上一个页面。
此时A页面列表页使用keepalive,进入B页面删除操作后返回A页面列表不刷新 (不使用vuex)
环境:
vue2.0
解决方法:
通过申明一个vue空模块,利用$emit发送通知
创建eventbus.js文件
import Vue from 'vue'
/**
* 定义空的vue实例,作为 eventbus实现非父子组件之间的通信(vue2.x中去掉了broadcast)
*/
var eventBus = new Vue({});
export default eventBus;
删除操作后$emit触发事件
import EventBus from '../components/eventBus';
EventBus.$emit('info', 'delete');
this.$router.go(-1);
A列表页面中$on监听事件
import EventBus from '../components/eventBus';
activated(){
//根据key名获取传递回来的参数,data就是map
EventBus.$on('addressInfo', function(data){
console.log(data,"data");
}.bind(this));
},
出现问题:
第一次进入$on并没有监听到事件
原因: on 执行了,Vue并没有储存监听事件,所以无法监听到数据
解决:利用eventBus来解决,而且组件不直接通过$on来存储数据,而是利用eventBus实例来存储数据,然后组件只负责来获取数据。
eventbus.js文件
// 创建vue实例,作为中间件进行数据传递
import Vue from 'vue'
export const EventBus = new Vue({
data () {
return {
// 定义数据
data: {}
}
},
created () {
// 绑定监听
this.$on('info', (value)=>{
this.data = value;
})
}
})
删除操作后$emit触发事件
import {EventBus} from '../components/eventBus';
EventBus.$emit('info', 'delete');
this.$router.go(-1);
A列表页面中$on监听事件
import {EventBus} from '../components/eventBus';
activated() {
if(EventBus.data == 'delete') { // 直接获取传送的数据
this.finished = false;
this.page = 0;
this.loadmore();
}
}