vue路由组件缓存

1. 理解

1.1 默认情况下, 被切换的路由组件对象会死亡释放, 再次回来时是重新创建的

1.2 如果可以缓存路由组件对象, 可以提高用户体验

 

2 .<keep-alive>

<keep-alive> 是Vue内置的一个组件,通常是用来保留数据状态或避免重复渲染,也就是我们说的缓存效果

<keep-alive>
  <component>
    <!-- 该组件将被缓存! -->
  </component>
</keep-alive>

prop:

  • include: 字符串或正则表达式。只有匹配的组件会被缓存。
  • exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。

 

// 组件 a
export default {
  name: 'a',
  data () {
    return {}
  }
}
 
<keep-alive include="a">
  <component>
    <!-- name 为 a 的组件将被缓存! -->
  </component>
</keep-alive>可以保留它的状态或避免重新渲染
<keep-alive exclude="a">
  <component>
    <!-- 除了 name 为 a 的组件都将被缓存! -->
  </component>
</keep-alive>可以保留它的状态或避免重新渲染

当然我们也可以根据组件来动态缓存

<keep-alive>
    <router-view>
        <!-- 所有路径匹配到的视图组件都会被缓存! -->
    </router-view>
</keep-alive>

我们还可以借助我们的路由元信息meta,那么我们来修改一下代码实现动态缓存:

(meta路由元信息对象里面放着的是类似于局部变量,在路由匹配的组件内部都能够访问得到,我们可以通过meta来定义一个自定义字段来判断标识页面是否需要开启缓存)

// routes 配置
export default [
  {
    path: '/',
    name: 'home',
    component: Home,
    meta: {
      keepAlive: true // 需要被缓存
    }
  }, {
    path: '/:id',
    name: 'edit',
    component: Edit,
    meta: {
      keepAlive: false // 不需要被缓存
    }
  }
]
 //通过v-if来动态的判断展示
<keep-alive>
    <router-view v-if="$route.meta.keepAlive">
        <!-- 这里是会被缓存的视图组件,比如 Home! -->
    </router-view>
</keep-alive>

<router-view v-if="!$route.meta.keepAlive">
    <!-- 这里是不被缓存的视图组件,比如 Edit! -->
</router-view>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Vue3中,结合路由组件缓存可以使用`<keep-alive>`标签来实现。通过设置`include`属性来指定需要被缓存路由名称。例如,如果你想缓存名为"News"的路由组件,可以这样写: ```html <keep-alive include="News"> <router-view></router-view> </keep-alive> ``` 这样,当你从其他路由跳转到"News"路由时,该组件会被缓存起来,再次返回该路由时,组件的状态会被保留。\[1\] 如果你只想缓存单个路由,可以在`<keep-alive>`标签内设置`include`属性,属性值为需要被缓存路由名称。例如,如果你想缓存名为"second"的路由组件,可以这样写: ```html <keep-alive include="second"> <router-view></router-view> </keep-alive> ``` 这样,当你从其他路由跳转到"second"路由时,该组件会被缓存起来,再次返回该路由时,组件的状态会被保留。\[2\] 按需缓存可以通过设置不同的`include`属性值来实现。例如,如果你想在返回时只缓存第一个页面的字体颜色为红色,可以将其设置为需要缓存路由名称,而将其他页面排除在缓存之外。\[3\] #### 引用[.reference_title] - *1* [vue2进阶篇:vue-router之缓存路由组件](https://blog.csdn.net/a924382407/article/details/125690667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue组件路由缓存keep-alive——vue路由缓存页面组件缓存](https://blog.csdn.net/LIUupup_/article/details/128789470)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值