vue项目使用keep-alive的作用

在vue项目中,难免会有列表页面或者搜索结果列表页面,点击某个结果之后,返回回来时,如果不对结果页面进行缓存,那么返回列表页面的时候会回到初始状态,但是我们想要的结果是返回时这个页面还是之前搜索的结果列表,这时候就需要用到vue的keep-alive技术了.

keep-alive 简介

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

用法也很简单:

<keep-alive>

    <component>

        <!-- 该组件将被缓存! -->

    </component>

</keep-alive>

props

include - 字符串或正则表达,只有匹配的组件会被缓存

exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存

// 组件 a

export default {

  name: 'a',

  data () {

    return {}

  }

}

<keep-alive include="a">

  <component>

    <!-- name 为 a 的组件将被缓存! -->

  </component>

</keep-alive> // 可以保留它的状态或避免重新渲染


<keep-alive exclude="a">

  <component>

    <!-- 除了 name 为 a 的组件都将被缓存! -->

  </component>

</keep-alive> // 可以保留它的状态或避免重新渲染

但实际项目中,需要配合vue-router共同使用.

router-view也是一个组件,如果直接被包在keep-alive里面,所有路径匹配到的视图组件都会被缓存:

<keep-alive>

    <router-view>

        <!-- 所有路径匹配到的视图组件都会被缓存! -->

    </router-view>

</keep-alive>

如果只想 router-view 里面某个组件被缓存,怎么办?


增加 router.meta 属性

// routes 配置exportdefault [

  {

    path: '/',

    name: 'home',

    component: Home,

    meta: {

      keepAlive: true// 需要被缓存    }

  }, {

    path: '/:id',

    name: 'edit',

    component: Edit,

    meta: {

      keepAlive: false// 不需要被缓存    }

  }

]

<keep-alive>

    <router-view v-if="$route.meta.keepAlive">

        <!-- 这里是会被缓存的视图组件,比如 Home! -->

    </router-view>

</keep-alive>

<router-view v-if="!$route.meta.keepAlive">

    <!-- 这里是不被缓存的视图组件,比如 Edit! -->

</router-view>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 链接:https://www.jianshu.com/p/4b55d312d297 keep-alivekeep-...
    刘越姐姐啊阅读 650评论 1 1
  • VUE Vue :数据驱动的M V Vm框架 m :model(后台提供数据),v :view(页面),vM(模板...
    wudongyu阅读 5,451评论 0 11
  • 到现在,接触vue也小段时间了,项目进行到了一定程度,然而项目缺少了缓存机制,所以每次跳转页面都会重新create...
    af13e05a9b9a阅读 2,905评论 0 1
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,275评论 0 6
  • keep-alive keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个...
    羊烊羴阅读 232,859评论 7 103