You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
import Vue from "vue";
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state: {
|
|
caches: [],
|
|
},
|
|
actions: {
|
|
// 添加缓存的路由组件
|
|
addCache({ state, dispatch }, componentName) {
|
|
if (Array.isArray(componentName)) {
|
|
componentName.forEach((item) => {
|
|
dispatch("addCache", item);
|
|
});
|
|
return;
|
|
}
|
|
|
|
const { caches } = state;
|
|
if (!componentName || caches.includes(componentName)) return;
|
|
|
|
caches.push(componentName);
|
|
console.log("缓存路由组件:", componentName);
|
|
},
|
|
|
|
// 移除缓存的路由组件
|
|
removeCache({ state, dispatch }, componentName) {
|
|
if (Array.isArray(componentName)) {
|
|
componentName.forEach((item) => {
|
|
dispatch("removeCache", item);
|
|
});
|
|
return;
|
|
}
|
|
|
|
const { caches } = state;
|
|
const index = caches.indexOf(componentName);
|
|
if (index > -1) {
|
|
console.log("清除缓存的路由组件:", componentName);
|
|
return caches.splice(index, 1)[0];
|
|
}
|
|
},
|
|
// 移除缓存的路由组件的实例
|
|
async removeCacheEntry({ dispatch }, componentName) {
|
|
const cacheRemoved = await dispatch("removeCache", componentName);
|
|
if (cacheRemoved) {
|
|
await Vue.nextTick();
|
|
dispatch("addCache", componentName);
|
|
}
|
|
},
|
|
// 清除缓存的路由组件的实例
|
|
clearEntry({ state, dispatch }) {
|
|
const { caches } = state;
|
|
caches.slice().forEach((key) => {
|
|
dispatch("removeCacheEntry", key);
|
|
});
|
|
},
|
|
},
|
|
};
|