美文网首页
vue keep-alive保存状态

vue keep-alive保存状态

作者: aimee66 | 来源:发表于2019-05-01 10:29 被阅读0次

使用vue的keep-alive属性设置页面保存状态

应项目需求,开发一个类似app的移动端H5项目,有tabbar标签切换,并需要保存当前状态。之前对vue学习不够全面,并不了解keep-alive属性,再查询各种资料,终于看到了keep-alive,简单好用,不禁感叹vue真是强大。

keep-alive定义

keep-alive是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。

原理

包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和transition 相似,keep-alive是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。

prop

include: 字符串或正则表达式。只有匹配的组件会被缓存。
exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。

常见用法

  • 用法——组件
// 组件
export default {
  name: 'test-keep-alive',
  data () {
    return {
        includedComponents: "test-keep-alive"
    }
  }
}


<keep-alive include="test-keep-alive">
  <!-- 将缓存name为test-keep-alive的组件 -->
  <component></component>
</keep-alive>

<keep-alive include="a,b">
  <!-- 将缓存name为a或者b的组件,结合动态组件使用 -->
  <component :is="view"></component>
</keep-alive>

<!-- 使用正则表达式,需使用v-bind -->
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

<!-- 动态判断 -->
<keep-alive :include="includedComponents">
  <router-view></router-view>
</keep-alive>

<keep-alive exclude="test-keep-alive">
  <!-- 将不缓存name为test-keep-alive的组件 -->
  <component></component>
</keep-alive>
  • 用法——结合router
    结合router,缓存部分页面
    使用$route.meta的keepAlive属性:
<keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

需要在router中设置router的元信息meta

//...router.js
export default new Router({
  routes: [
    {
      path: '/',
      name: 'Hello',
      component: Hello,
      meta: {
        keepAlive: false // 不需要缓存
      }
    },
    {
      path: '/page1',
      name: 'Page1',
      component: Page1,
      meta: {
        keepAlive: true // 需要被缓存
      }
    }
  ]
})

效果

如图:这个是vux 插件,效果正是如此,状态保留在内存中,防止重复渲染。
那么问题来了,使用keep-alive缓存也会有弊端,会导致有些页面有些数据改变的时候,页面数据需要重新渲染,这时候可以配合watch 监听来解决。

相关文章

  • vue 列表详情页返回不刷新列表

    使用保存状态 1.在app.vue里使用keepalive 2.在需要保存状态的页面路...

  • vue keep-alive保存状态

    使用vue的keep-alive属性设置页面保存状态 应项目需求,开发一个类似app的移动端H5项目,有tabba...

  • VUE keep-alive组件

    为什么要使用 keep-alive是vue官方提供的一个保存全局状态的一个组件,相对于vue-x来说,拥有更好的性...

  • Vue高级特性「八」--keep-alive 缓存组件 ***

    keep-alive是什么 keep-alive用于保存组件的渲染状态。 keep-alive是一个抽象组件:它自...

  • vue的<keep-alive>

    vue的是Vue的内置组件,能在组件切换过程中将状态保留在内存中,...

  • Vue之keep-alive

    keep-alive 简介 keep-alive是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新...

  • vue-router 之 keep-alive

    keep-alive 简介 keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重...

  • vue.js keep-alive

    keep-alive 简介 keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重...

  • vue-router 之 keep-alive

    keep-alive 简介 keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重...

  • vue知识点

    1 对keep-alive的理解 keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,避...

网友评论

      本文标题:vue keep-alive保存状态

      本文链接:https://www.haomeiwen.com/subject/qhgvnqtx.html