vue中keep-alive的使用

阅读数:104 评论数:0

跳转到新版页面

分类

html/css/js

正文

一、概念

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

1、作用

在组件切换过程中将状态保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。

2、原理

在created函数调用时将需要缓存的VNode节点(虚拟DOM,其实就是JS对象)保存在this.cache中,在render时,如果VNode的name符合缓存条件(可以用Include以及exclude控制),则会从this.cache中取出之前缓存的VNode实例进行渲染。

3、属性

(1)include 字符串或正则表达式,只有匹配的组件会被缓存。

(2)exclude 字符串或正则表达式,匹配的组件不会被缓存。

(3)max 数字,最多可以缓存多少个组件实例。

二、生命周期函数

1、activated

在keep-alive组件被激活时调用

2、deactived

在keep-alivee组件停用时调用

三、使用示例

1、缓存所有页面

在App.vue里面

<template>
  <div id="app">
    <keep-alive>
        <router-view />
    </keep-alive>
  </div>
</template>

2、根据条件缓存页面

<template>
  <div id="app">
    <keep-alive include='test'>
      <router-view />
    </keep-alive>
  </div>
</template>

3、结合Router,缓存部分页面

(1)router目录下的index.js文件里

...
routers : [
  {
    path: '/',
    name: 'home'
    component: Home,
    children: [
     {
       path: 'goods'
       name: 'goods',
       component: Goods
       meta: {
         keepAlive: false
       }
     }
    ]
  }
]

(2)在App.vue里面

<template>
  <div id="app">
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
  </div>
</tempate>



相关推荐

缓存页面主要Jul为了防止重复渲染dom,减少加载时间及性能消耗,提高用户体验。 一、旧版的语法 <keep-alive> <router-view v-if="$route.meta.kee

1、安装依赖 npm install svg-sprite-loader --save-dev 2、配置build文件夹中的webpack.base.conf.js 3、在src/component

在列表渲染时使用key属性 当Vue.js用v-for正在更新已渲染过的元素列表时,它默认用&ldquo;就地复用&rdquo;策略,如果数据项的顺序被改变,Vue将不会移动D

一、vue.js devtools开发工具的使用 1、安装 在chrome或firefox浏览器的扩展插件仓库里搜索vue devtool。 2、debugger的使用 假设我们想调试App.vue这

在一些情况下,我们可能会需要对一个prop进行双向绑定,但它破坏了单向数据流。 在vue 2.3.0,重新引入了.sync修饰符,这是一个语法糖。 例子: <

&lt;div id="app"&gt; &lt;div v-on:click="dodo"&gt;

在登陆页的mouted生命周期方法中,添加 <pre class

ref被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象上。如果在普通的DOM元素上使用,引用指向的就是DOM元素,如果用在子组件上,引用就指向组件实例。 <!-- `vm.$

在使用Vue中经常看到HTML中有标签属性前面添加了“:”,有些没有。 其实是v-bind的缩写。 v-bind 缩写: ‘:’ 用法:动态绑定一个或多个特性,或一个组件prop到表达式。在绑定cl

module.exports = { "plugins": { "postcss-import": {},