最近bug改的头都大了,男bug和女bug实在是太刁钻了!!!!
背景:某个风和日丽的清晨,我一早打开禅道,看到女bug给我提了一个从列表访问详情,返回列表后希望还在原位置的bug。
解决方法:首先在router里配置meta
{ //list管理 path: '/home/list', name: 'Catalogmanage', component: resolve => require(['../pages/list.vue'], resolve), //需缓存list meta: { keepAlive: true } },
不缓存的页面就不要写keepAlive或者keepAlive写成false
然后在它上一级的routerView里写上
<keep-alive > <router-view v-if="$route.meta.keepAlive" @changeAnnouceNum="changeAnnouceNum"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive" @changeAnnouceNum="changeAnnouceNum"></router-view>
这里就根据meta属性判断是否缓存了,这块看好是不是他的直系父组件,写错了就惨了
到这里还有个问题,我这个列表跳转到详情后,详情页里还有编辑,这个routerview只访问一次就缓存起来了,再不刷新数据,我做的更改根本看不到,本以为就这样放弃了,但是通过搜索资料,发现了一个神奇的钩子函 activated 用了这个函数问题也就迎刃而解了,只要在列表页里把用的接口方法放在这里就好了,既刷新了数据,又保存了其他缓存信息
另附这个钩子函数的一些说明
- activated 生命周期在keep-alive 组件激活时调用
- 服务器端渲染期间不调用该生命周期
- 通常和deactivated周期一起使用