Vue keep-alive + el-tab路由切换的正确用法

Vue要实现站点的多Tab切换,百度了一下Vue keep-alive,出来的结果大部分是这样的。

<keep-alive> <router-view v-if="$route.meta.keepAlive" /> </keep-alive>

<router-view v-if="!$route.meta.keepAlive" />

看似没有什么问题,但真正使用的时候会产生奇怪的问题,当从缓存的页面切换到其它页面时,缓存页面的created,ativated会重新运行。问题就出现在v-if,会使页面删除导致页面重新执行生命周期函数。

第一个写这个出来的人对router-view应该是不完全理解,一个页面应该只有一个router-view就够了,路由会自动加载,所以上面的代码应写成<keep-alive :include="cacheviews"> <router-view></router-view> </keep-alive>。cacheviews为keep-alive的一个属性,类型为['a', 'b'],指定数组内的名称的组件被缓存,例如上面指定a,b组件被缓存。这个名称是组件的名称,不是路由定义的名称,如下图,我使用的是TS(typescript)语法,即为类名,非TS自行对应。

 缓存数组的定义,如上面定义的cacheviews,一般使用vuex的state全局变量来维护,再配合Vue路由守卫控制cacheviews数组的动态添加、删除,使用方法文章https://blog.csdn.net/qq_50906507/article/details/128208013,进入路由后添加缓存,tab关闭后删除缓存。

哪些路需要缓存可以通过设置路由的meta属性来区分,这里存放的是路由的自定义数据,在页面上可以通过$route.meta来读取。网上也有正确的使用文章,链接Vue 通过keep-alive缓存Tab页面_JA+的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue中的keep-alive组件可以用来缓存已经渲染过的组件,从而避免重复渲染。然而,当使用二层级路由(即嵌套的子路由)时,我们可能会遇到无法正确缓存子路由组件的问题。 在使用vue-router中的嵌套路由时,如果我们想要缓存二层级的菜单组件,我们需要在父路由的组件中添加keep-alive组件。例如,我们有一个父路由组件为A,它包含一个<router-view>来展示子路由组件,其中有一个子路由组件为B,我们想要缓存它。我们可以将keep-alive组件添加在A组件的外层,如下所示: ```html <template> <div> <keep-alive> <router-view></router-view> </keep-alive> </div> </template> ``` 这样,无论我们在A组件和B组件之间切换,B组件都会被缓存,避免了重复渲染的问题。 然而,如果我们想要缓存二层级路由的菜单组件,我们需要做一些额外的处理。我们可以在A组件中使用<router-view>来展示菜单组件,并在父组件中添加keep-alive组件,如下所示: ```html <template> <div> <keep-alive> <router-view name="menu"></router-view> </keep-alive> <router-view></router-view> </div> </template> ``` 这样,菜单组件会被正确地缓存,并且在A组件中的其他子路由切换时保持缓存,解决了无法缓存二层级路由菜单的问题。 综上所述,使用Vuekeep-alive组件能够解决缓存二层级路由菜单的问题,我们只需要在父组件中添加keep-alive组件,并在父组件的模板中使用<router-view>来展示菜单组件即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值