Vue中关于keep-alive的使用
2024-10-21 19:31:23
keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在v页面渲染完毕后不会被渲染成一个DOM元素
当组件在keep-alive内被切换时组件的activated、deactivated这两个生命周期钩子函数会被执行
被包裹在keep-alive中的组件的状态将会被保留,例如我们将某个列表类组件内容滑动到第100条位置,那么我们在切换到一个组件后再次切换回到该组件,该组件的位置状态依旧会保持在第100条列表处
被keep-alive包裹的动态组件或router-view会缓存不活动的实例,再次被调用这些被缓存的实例会被再次复用,对于我们的某些不是需要实时更新的页面来说大大减少了性能上的消耗,不需要再次发送HTTP请求,但是同样也存在一个问题就是被keep-alive包裹的组件我们请求获取的数据不会再重新渲染页面,这也就出现了例如我们使用动态路由做匹配的话页面只会保持第一次请求数据的渲染结果,所以需要我们在特定的情况下强制刷新某些组件
利用include、exclude属性
include属性表示只有name属性为bookLists,bookLists的组件会被缓存,(注意是组件的名字,不是路由的名字)其它组件不会被缓存exclude属性表示除了name属性为indexLists的组件不会被缓存,其它组件都会被缓存
<keep-alive include="bookLists,bookLists">
<router-view></router-view>
</keep-alive>
<keep-alive exclude="indexLists">
<router-view></router-view>
</keep-alive>
利用meta属性
export default[
{
path:'/',
name:'home',
components:Home,
meta:{
keepAlive:true //需要被缓存的组件
},
{
path:'/book',
name:'book',
components:Book,
meta:{
keepAlive:false //不需要被缓存的组件
}
]
<keep-alive>
<router-view v-if="this.$route.meat.keepAlive"></router-view>
<!--这里是会被缓存的组件-->
</keep-alive>
<keep-alive v-if="!this.$router.meta.keepAlive"></keep-alive>
<!--这里是不会被缓存的组件-->
利用berforeRouteEnter实现前进刷新,后退缓存资料
利用第三方插件实现前进刷新,后退不缓存
最新文章
- 理工科应该的知道的C/C++数学计算库(转)
- navicat远程连接mysql
- Oracle中的if...then...elsif
- 借助 ASR 和 System Center 执行基于 SAN 复制的企业级灾难恢复
- 怎样让老浏览器兼容html5新标签
- 两表关联更新,用于update 回滚
- 卸载cloudera manager
- hdu2222Keywords Search
- ASP.NET页面继承关系
- <;转>;java编译问题:使用了未经检查或不安全的操作
- out和ref之间的区别
- Effective C++ 读书笔记(1-7)
- 万马齐喑究可哀-中文编程的又一波";讨论";
- Elasticsearch 快速开始
- mongodb 遇到问题-查询单个需要包装id
- 如何在Jenkins上配置一个可以从其它Job取回Artifact的Job
- Java反射获取对象VO的属性值(通过Getter方法)
- 还在手动给css加前缀?no!几种自动处理css前缀的方法简介
- 越狱机器SSH安装与使用
- JS 读取本地Excel文件