vue2中的keep-alive使用总结及注意事项
keep-alive 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。结合vue-router中使用,可以缓存某个view的整个内容。 基本使用如下: 一般有这样的需求,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页 有两个情况:1. 直接点击浏览器的后退返回按钮。 2. 点击导航栏中的 /list的链接返回。 那么针对第一种情况下,我们直接通过后退按钮时,返回到列表页(/list) 是不需要请求数据。 针对第二种情况下,我们通过链接返回到列表页是需要请求数据。 所以这边有三种情况:1. 默认进来列表页需要请求数据。 2. 进入详情页后,通过浏览器默认后退按钮返回,是不需要ajax的请求的。 3. 进入详情页后,通过点击链接返回到列表页后,也是需要发ajax请求的。 配置如下: 1. 入口文件 app.vue 的配置如下: 2. 在router中设置meta属性,设置 keepAlive: true 表示需要使用缓存,false的话表示不需要使用缓存。且添加滚动行为 scrollBehavior router/index.js 的配置如下: require(['@/views/list'],resolve),// 使用懒加载
meta: {
keepAlive: true // true 表示需要使用缓存
}
},{
path: '/list',// 使用懒加载
meta: {
keepAlive: true // true 表示需要使用缓存 false表示不需要被缓存
}
},{
path: '/detail',name: 'detail',component: resolve => require(['@/views/detail'],resolve) // 使用懒加载
}
],scrollBehavior (to,from,savedPosition) {
// 保存到 meta 中,备用
to.meta.savedPosition = savedPosition;
if (savedPosition) {
return { x: 0,y: 0 };
}
return {};
}
});
export default router;
3. list.vue 代码如下: vue
{{msg}}4. detail.vue 代码如下: {{msg}}
二:使用router.meta 扩展假设现在有3个页面,需求如下: 1. 默认有A页面,A页面进来需要一个请求。 2. B页面跳转到A页面,A页面不需要重新请求。 3. C页面跳转到A页面,A页面需要重新请求。 实现方式如下: 在 A 路由里面设置 meta 属性: require(['@/views/a'],meta: {
keepAlive: true // true 表示需要使用缓存
}
}
所以router/index下的所有代码变为如下: Vue.use(Router); require(['@/views/b'],resolve)
},{
path: '/c',name: 'C',component: resolve => require(['@/views/c'],resolve)
}
],y: 0 };
}
return {};
}
});
export default router;
在 B 组件里面设置 beforeRouteLeave B组件所有代码如下: {{msg}}
在 C 组件里面设置 beforeRouteLeave: c组件所有代码如下: {{msg}}
a组件内的所有的代码如下: vue
{{msg}}注意 b组件到a组件不重新请求数据 (包括点击链接和浏览器后退按钮),c组件到a组件请求数据(包括点击链接和浏览器后退按钮). 总结以上所述是小编给大家介绍的vue2中的keep-alive使用总结及注意事项。编程之家 52php.cn 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |