vue keep-alive部分使用场景

一、需求:

有三个页面,列表、新增、预览,如下
在这里插入图片描述

preview可返回到add继续修改,需要form表单还在,所以需要对add页面做缓存,但是从list进入add的时候需要清空缓存,否则会展示上次提交信息。

二、解决方案(两种)

router.js

export default [
    {
        path: '/list',
        name: 'list',
        meta: {
            title:"列表",
            index:0
        },
        component: () => import('@/views/list.vue') 
    },{
        path: '/add',
        name: 'add',
        meta: {
            title:"新增",
            keep_alive: true,
            index:1
        },
        component: () => import('@/views/add.vue') 
    },{
        path: '/preview',
        name: 'preview',
        meta: {
            title:"信息",
            index:2
        },
        component: () => import('@/views/preview.vue') 
    },
]
1、用include

router.js——设置index表示页面层级,如上

App.vue——监听路由

<div id="app">
	<keep-alive :include="keep_alive">
		<router-view />
	</keep-alive>
</div>
data() {
  return {
    keep_alive: []
  };
},
watch: {
    $route(to, from) {
	    if (to.meta.index > from.meta.index && to.name === "add") {
	       this.keep_alive = ["add"];
	     } else if (to.meta.index < from.meta.index && to.name != "add") {
	       this.keep_alive = [];
	     }
    }
 }
2、meta里添加属性

router.js——给需要缓存的路由,在meta添加属性keep_alive=true,如上

App.vue

<keep-alive>
	<router-view v-if="$route.meta.keep_alive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keep_alive"></router-view>

list.vue

beforeRouteLeave:(to,from,next)=>{
   if(to.name=="add"){
     from.meta.keep_alive=false
   }
   next() 
 },

add.vue

//保存成功以后keep_alive被清除,所以重新设置
beforeRouteLeave:(to,from,next)=>{
  if(to.name=="preview"){
    from.meta.keep_alive=true
  }else{
    from.meta.keep_alive=false
  }
   next() 
},

preview.vue

//保存成功 跳转到list前
this.$router.options.routes[2].meta.keep_alive=false
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值