33 lines
1.2 KiB
JavaScript
33 lines
1.2 KiB
JavaScript
import Vue from 'vue'
|
|
import store from './store';
|
|
Vue.mixin({
|
|
beforeRouteLeave: function (to, from, next) {
|
|
if (this.$route.meta.keepAlive === true) {
|
|
const result = this.$route.meta.keepAlive === true && store.state.tags.tagList.some(ele => {
|
|
return ele.value === this.$route.fullPath;
|
|
});
|
|
if (this.$vnode && !result) {
|
|
if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache) {
|
|
if (this.$vnode.componentOptions) {
|
|
let key = this.$vnode.key == null
|
|
? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '')
|
|
: this.$vnode.key;
|
|
let cache = this.$vnode.parent.componentInstance.cache;
|
|
let keys = this.$vnode.parent.componentInstance.keys;
|
|
if (cache[key]) {
|
|
if (keys.length) {
|
|
let index = keys.indexOf(key);
|
|
if (index > -1) {
|
|
keys.splice(index, 1);
|
|
}
|
|
}
|
|
delete cache[key];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
next();
|
|
},
|
|
});
|