【Vue】keep-alive缓存路由跳转前的状态与使用陷阱。

前言:保存路由跳转前的状态这种应用场景还是很常遇到的,比如进行商品筛选,筛选出一些后,点击路由跳转到某个商品的详情页,然后返回页面时,我想让之前的页面能展示之前筛选出来的商品。

 

一、代码实现

<!-- App.vue根组件代码 -->
<template>
  <div class="app">
      <div class="slide">
          <ul>
              <li><router-link to="/page1" >page1</router-link></li>	
              <li><router-link to="/page2" >page2</router-link></li>	
          </ul>	
      </div>
      <div class="content">
      	   <keep-alive>
      	       <router-view></router-view>
      	   </keep-alive>
      </div>
  </div>
</template>
//路由配置页面代码
import Vue from 'vue'
import Router from 'vue-router'
import Page1 from '@/page/Page1'
import Page2 from '@/page/Page2'

Vue.use(Router)

export default new Router({
  routes: [
    {path: '/page1', component: Page1 },
    {path: '/page2', component: Page2 },
  ],
  mode:'history'
})

 

<!-- Page1代码 -->
<template>
	<div class="page-1">
		<h3>page1</h3>
		路由前的输入状态:<input type="text" v-model="value">
		<router-link to="page2">跳转到page2</router-link>
	</div>
</template>
<script type="text/javascript">
	export default {
		name:'page1',
		data(){
			return {
				value:''
			}
		}
	}
</script>
<!-- page2代码 -->
<template>
	<div class="page-2">
		<h3>page2</h3>
		<router-link to="/page1">返回到page1</router-link>
	</div>
</template>

这样就可以保存到路由跳转前的状态了。但是这样有个问题是,如果页面很多的话,并且并不是所有页面都需要保存路由前的状态。

 

二、代码优化

<!-- App.vue根组件代码 -->
<template>
  <div class="app">
      <div class="slide">
          <ul>
              <li><router-link to="/page1" >page1</router-link></li>	
              <li><router-link to="/page2" >page2</router-link></li>	
          </ul>	
      </div>
      <div class="content">
      	   <keep-alive>
      	       <router-view v-if="$route.meta.keepAlive"></router-view>
      	   </keep-alive>
      	   <router-view v-if="!$route.meta.keepAlive"></router-view>
      </div>
  </div>
</template>
//路由配置页面
import Vue from 'vue'
import Router from 'vue-router'
import Page1 from '@/page/Page1'
import Page2 from '@/page/Page2'

Vue.use(Router)

export default new Router({
  routes: [
    {path: '/page1', component: Page1, meta:{ keepAlive:true } },
    {path: '/page2', component: Page2 },
  ],
  mode:'history'
})

这样,我们可以自由控制需要缓存的路由页面了。

 

三、keep-alive使用陷阱

<!-- App.vue根组件代码 -->
<template>
  <div class="app">
      <div class="slide">
          <ul>
              <li><router-link to="/page1" >page1</router-link></li>	
              <li><router-link to="/page2" >page2</router-link></li>	
          </ul>	
      </div>
      <keep-alive>
          <div class="content">
              <router-view></router-view>
          </div>  
      </keep-alive>
  </div>
</template>

keep-alive里面必须包裹组件,而不能出现其他标签。不然会导致无法缓存页面。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值