在nuxt中,为了保证浏览器返回后页面的状态不改变,我们一般会这样写
<nuxt keep-alive />正常情况下,这种写法不会有问题。但是,当你使用了嵌套路由,问题就出现了:
当你访问一个嵌套路由的页面后,再访问其他页面,然后在访问另一个嵌套路由,你会发现页面显示的是你之前访问过的嵌套路由页面,简单来说:/user/info ==> / ==> /user/set这时候的/user/set显示为/user/info页面的内容

为了描述清楚,这里我用四个页面复现一下这个问题。
创建一个nuxt项目,目录结构如下

其中,info和set是user的子路由。
user.vue

然后我们在info.vue中添加前往首页的链接

接着在首页中添加前往SET页面的链接

最后是SET页面,单纯的展示内容

好,现在我们的访问路径按照上文的来:
1.我们先进入INFO页面
2.点击前往首页

3.点击前往SET页面
这个时候我们可以看到,浏览器地址栏显示的是/user/set,然而页面却是INFO页面。
到这里,这个问题就完整的复现了,这个问题的出现是因为我们在nuxt使用了keep-alive,在nuxt看来,/user/info和/user/set都是/user,所以在我们从INFO页到首页的时候,它保存了/user/info的页面,当我们再次进入/user的时候,无论我们的url是指向哪一个嵌套子路由,他都显示之前保存的页面。这个结论我们可以从chrome的vue devtools插件看出来。
当我们从INFO页面到首页后,pagesUserInfo被缓存了,而当我们从首页进到SET页面时,缓存被激活,此时没有触发渲染,所以我们看到的还是INFO页面

目前这个问题还没有找到相对完美的解决方案,我的做法是取消使用嵌套路由,用子路由来代替嵌套路由,这种做法不会改变URL,但是弊端是那些公共的样式需要在每个子路由引入。希望有解决过这个问题的大佬给我一个更好的解决方案。
以上。