背景
最近为旧项目增加页面缓存的效果,正常是为最顶层的router-view使用keep-alive进行包裹,然后将vue-router的所有路由配置过滤一遍,拿到所有配置缓存项为true的组件name,作为数组配置到include里面。
但是我尝试了很多次,即使我把include的值给写死,keep-alive依旧不生效。
但是也不是全部生效,有的还是生效的,比如驾驶舱、工作台....
我发现我项目的路由层级是这样的
我解释一下,每个节点都是一个页面,下属的节点是页面其中的router-view渲染出来的组件,也就是说,一共有三层router-view.
好了,现在看来keep-alive放在最顶层,肯定不生效了。
由于历史原因,我现在的需求是缓存page1和page2。
如果我再workplat外包裹一层keep-alive,并且include=['page1']的话,那么page2和page3就存不上了。
这里我在解释一下,如果父组件缓存了,那么子组件也会被缓存。如果父组件被销毁重建了,那么其内部的keep-alive也会被销毁重建,需要缓存的子组件也直接没了,不会被缓存。
也就是说我从在workplat和page2之间切换的时候,即使我设置了缓存page1和page3,那么在workplat被销毁的时候,缓存也是直接不生效了。
解决办法:
1、铺平,只留一个router-view
我的旧项目和开发时间不允许我这么做
2、缓存的组件放到一个keep-alive下
也就是把page2也放在workplat下面【落实了】,我改成这样了