vue项目(缓存页面)保持页面状态,点击tag切换后,还能回到之前操作的样子
保持页面操作中状态,在点击tag切换的时候,还能回到之前的样子。拿收集整编页面为例。
主要用到vue 内置组件keep-alive,参考文档:API — Vue.js (vuejs.org)
把需要keep-alive的路由(name)写进状态中,用状态来控制缓存页面。
1、路由设置,给需要keep-alive的路由,在mate中设置keepAlive为‘1’
{ path:'/collectionmanage', name:'CollectionManage', component:resolve=>require(['@/组件所在路径/collectionmanage’],resolve), meta:{ title:'收集整编', keepAlive:'1' } }
2、在整体布局rooter-view外面包裹keep-alive,include中字符串集合就是缓存的组件,通过组件的name去匹配。因此组件需要定义name,跟路由的name一致
<keep-alive :include="$store.state.keepalive.substring(0,$store.state.keepalive.lastIndexOf(','))"> <rooter-view :key='key'> </keep-alive> watch:{ $route(to,from){ if(to.meta.keepAlive && to.meta.keepAlive == '1'){ //判断路由中是否设置了keepAlive为1 if(to.query.tag==1){ //点击tag标签时保持缓存 if(this.$store.state.keepalive.indexOf(to.name)==-1){ this.$store.state.keepalive = this.$store.state.keepalive+to..name+',' } } }else{ //点击左侧菜单时,先去除缓存,在需要缓存的页面里再添加缓存 if(this.$store.state.keepalive.indexOf(to.name)!==-1){ this.$store.state.keepalive = this.$store.state.keepalive.replace(to.name) } } } }
3、页面组件内,当有初始操作的时候,判断状态内是否有该路由的name,如果没有,写入
比如进入收集整编页面后,最先点击左侧树,那就在点击树事件内增加以下代码
//点击左侧树 handleTreeNodeClick(data,node){ if(this.$store.state.keepalive.indexOf('CollectionManage')==-1){ this.$store.state.keepalive = this.$store.state.keepalive+'CollectionManage,' } //......其他代码 }
本文来自博客园,作者:zwbsoft,转载请注明原文链接:https://www.cnblogs.com/zwbsoft/p/16224878.html
电话微信:13514280351