感觉像是 vue keep-alive 的 bug ,关闭当前的 tab 之后,虽然 keep-alive 的 include 属性变了,但是页面组件并没有销毁,还存在于内存里面
```js
// 删除菜单项
function delMenu(menu, nextPath) {
let index = 0
index = menuList.value.findIndex((item) => item.path === menu.path)
if (nextPath) {
router.push(nextPath)
return
}
// 若删除的是当前页面,回到前一页,若为最后一页,则回到默认的首页
if (menu.path === activeMenu.path) {
const prePage = index - 1 > 0 ? menuList.value[index - 1] : {path: defaultMenu.path}
router.push({path: prePage.path, query: prePage.query || {}})
}
setTimeout(() => {
if (!menu.meta.hideClose) {
if (menu.meta.cache && menu.name) {
store.commit('keepAlive/delKeepAliveComponentsName', menu.name)
}
menuList.value.splice(index, 1)
}
}, 300);
}
```
如楼上所说,改一下顺序确实可以,但是还必须设置延迟 300ms ,有点莫名其妙。
keep-alive 还是少用,感觉不太靠谱,之前写 vue 的时候,在 dev-tools 经常看同一个页面(组件)的几份缓存,而官方也没有提供清理缓存的 api https://github.com/vuejs/rfcs/pull/284 |