美文网首页
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 keep-alive保存状态

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