- App.vue 中meta对象的属性控制是否展示
1 <keep-alive> 2 <router-view v-if="$route.meta.keepAlive"></router-view> 3 </keep-alive> 4 <router-view v-if="!$route.meta.keepAlive"></router-view>
- router.js中,给需要不刷新的页面路由添加meta字段
1 path: 'homeInfo', 2 name: 'HomeInfo', 3 component: () => import('@/views/home/index'), 4 meta: { 5 title: '列表页', 6 keepAlive: true, // 判断是否需要缓存 7 isBack: false // 判断是否为返回操作 8 }
- 在对应的组件中
1 activated() { 2 if (!this.$route.meta.isBack) { 3 // 操作,从其他页面进入时,可以操作恢复默认状态、请求接口。。。 4 // 页码重置查询 5 6 } else { 7 // 详情页返回操作,比如页面位置 8 // 页码不重置 9 10 } 11 }, 12 beforeRouteEnter(to, from, next) { 13 if (from.name === 'HomeInfo' ) { 14 to.meta.isBack = true 15 } else { 16 to.meta.isBack = false 17 } 18 next() 19 }
- 注意:进入已经缓存的页面时,第一次进入,触发钩子created-> mounted-> activated,退出时触发deactivated。再次进入时,只触发activated