如何解决vue-template-admin中三级路由缓存失效的问题?

更新于
2026-09-26 17:54:06
1阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计828个文字,预计阅读时间需要4分钟。

如何解决vue-template-admin中三级路由缓存失效的问题?

1. 为什么三级缓存不生效?在src/layout/AppMain组件中:keep-alive的组件依赖cachedViews,cachedViews是store中的状态,cachedViews的逻辑在src/layout/TagView,当路由变更时会调用addViewTags,addViewTag会根据...

1. 为什么三级会缓存不了

在src/layout/AppMain组件:


keep-alive的组件依赖cachedViews,cachedViews是store中的一个状态,cachedViews的逻辑在src/layout/TagView


当路由变更时就会调用addViewTags,addViewTag会根据匹配的路由name属性进行缓存。而用到三级路由的时候,拿到name只能时第三级路由的name,二级路由组件的名字会丢失,keep-alive就不会进行缓存。
知道原因之后,第一个想法就是把二级路由的name也加上去就好了。要实现这个也很简单,只需要获取到matched属性就可以拿到匹配到的路由组件,把它加入到cachedViews数组就好了。但是有个问题就是,假设这里有个二级路由1-1,三级路由1-1-1,1-1-2,当要关掉1-1-1组件时,你到底要不要把1-1给删了,如果删了,缓存能顺利失效,但是如果你之前是打开了1-1-2,缓存的路由就会失效,因为它是依赖1-1的。如果不删的话,在侧边栏打开1-1-1的链接的时候,它又会重新复用回原本的组件。

阅读全文

本文共计828个文字,预计阅读时间需要4分钟。

如何解决vue-template-admin中三级路由缓存失效的问题?

1. 为什么三级缓存不生效?在src/layout/AppMain组件中:keep-alive的组件依赖cachedViews,cachedViews是store中的状态,cachedViews的逻辑在src/layout/TagView,当路由变更时会调用addViewTags,addViewTag会根据...

1. 为什么三级会缓存不了

在src/layout/AppMain组件:


keep-alive的组件依赖cachedViews,cachedViews是store中的一个状态,cachedViews的逻辑在src/layout/TagView


当路由变更时就会调用addViewTags,addViewTag会根据匹配的路由name属性进行缓存。而用到三级路由的时候,拿到name只能时第三级路由的name,二级路由组件的名字会丢失,keep-alive就不会进行缓存。
知道原因之后,第一个想法就是把二级路由的name也加上去就好了。要实现这个也很简单,只需要获取到matched属性就可以拿到匹配到的路由组件,把它加入到cachedViews数组就好了。但是有个问题就是,假设这里有个二级路由1-1,三级路由1-1-1,1-1-2,当要关掉1-1-1组件时,你到底要不要把1-1给删了,如果删了,缓存能顺利失效,但是如果你之前是打开了1-1-2,缓存的路由就会失效,因为它是依赖1-1的。如果不删的话,在侧边栏打开1-1-1的链接的时候,它又会重新复用回原本的组件。

阅读全文