美文网首页
重学Vue--keep-alive的使用

重学Vue--keep-alive的使用

作者: 小q | 来源:发表于2020-10-02 17:11 被阅读0次

keep-alive是什么?

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

keep-alive的作用:简单来说就是在组件切换中保留组件内的状态,避免重复渲染,减少加载时间和性能损耗,提高用户体验。

keep-alive的参数

  • include - 字符串或正则表达式。只有名称匹配的组件会被缓存。
  • exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。
  • max - 数字。最多可以缓存多少组件实例。

keep-alive的生命周期

  • activated

    在 keep-alive 组件激活时调用,该钩子函数在服务器端渲染期间不被调用

  • deactivated:

    在 keep-alive 组件停用时调用,该钩子在服务器端渲染期间不被调用

注意只有使用keep-alive包裹时,这两个生命周期函数才会被调用,如果要在每次进入页面的时候获取最新的数据,需要在activated阶段获取数据,承担原来 created 钩子函数中获取数据的任务。使用 exclude 排除之后,就算被包裹在 keep-alive 中,这两个钩子函数依然不会被调用!另外,在服务端渲染时,此钩子函数也不会被调用。

keep-alive的使用

1. 缓存所有页面

需要在App.vue中定义router-view的位置包裹上keep-alive

//app.vue
<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link> |
    </div>
    <keep-alive >
      <router-view />
    </keep-alive>
  </div>
</template>

2. 根据条件缓存页面

使用include,exclude
//app.vue
<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link> |
      <router-link to="/keepAlive">keepAlive</router-link>
    </div>
    <!-- 1.逗号分隔字符串 -->
    <keep-alive include="Home,keepAlive" exclude="about">
      <router-view />
    </keep-alive>
    <!-- 2.正则表达式 (使用 `v-bind`) -->
    <keep-alive :include="/Home|keepAlive/">
      <router-view />
    </keep-alive>
    <!-- 3.数组 (使用 `v-bind`) -->
    <keep-alive :include="['a', 'b']">
      <router-view />
    </keep-alive>
  </div>
</template>

注意这里include,exclude匹配首先检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值)。匿名组件不能被匹配。

3. 集合路由,缓存页面

主要是在路由配置中为各个路由中增加meta属性,在meta属性中使用keepAlive控制组件的缓存,在App.vue中使用keep-alive包裹router-view,在router-view中使用v-if判断条件,条件为$route.meta.keepAlive具体如下:

//router中的index.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(VueRouter)

const routes = [{
    path: '/',
    name: 'Home',
    component: Home,
    meta: {
      keepAlive: false
    }
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import( /* webpackChunkName: "about" */ '../views/About.vue'),
    meta: {
      keepAlive: false
    }
  },
  {
    path: '/keepAlive',
    name: 'keepAlive',
    component: () => import('../views/keepAlive.vue'),
    meta: {
      keepAlive: true
    }
  }
]

const router = new VueRouter({
  routes
})

export default router
//app.vue
<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link> |
      <router-link to="/keepAlive">keepAlive</router-link>
    </div>
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive"/>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"></router-view>
  </div>
</template>

注意 : 这里需要再keep-alive包裹外再定义一个router-view,如不定义,其他不满足keep-alive的组件将无法被渲染。

相关文章

  • 重学Vue--keep-alive的使用

    keep-alive是什么? keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件...

  • SPARK的学习

    Spark着重学习这几点: scala 语言 Spark编程RDD 的理解使用DStream 的理解与使用 sca...

  • JS 中的类型转换

    参考: winter 的重学前端 字符串到数字 使用 Number() 转换 Number() 支持十进制、二进制...

  • 感受英国的教育

    英国的教育注重学生自主的发展,注重学生兴趣的培养,注重学生实际能力的锻炼。为此学校教育的各个环节都注...

  • HTML语义中使用的标签摘录

    前言 记录在《重学前端 - 04 | HTML语义:如何运用语义类标签来呈现Wiki网页?》使用到的标签,发现许多...

  • Axure变量详解

    以前使用Axure只是停留在元件的布局和简单交互事件的设置,使用得非常肤浅,直到现在有时间静下心来重学Axure,...

  • 重学iOS——9.Masonry的基本使用

    转载自:http://adad184.com/2014/09/28/use-masonry-to-quick-so...

  • 组件的基本使用 | 重学Vue3

    这个月开始重新开始学习Vue3,从理解基本使用到模拟实现! 这是关于组件。看文本篇,你将对组件有个清晰的认识 本文...

  • 重学PS系列之基本工具的使用

    1、移动工具 快捷键:v(英文模式下) 图层定位:拖拽到当前tab下的图片后,按住shift,可以保证在原位置放下...

  • 2019-10-08周二⛅

    《如何写好一篇日记,只要做好以下四点就可以了》《重学前端 - ?》 使用方法 注意 el-scrollbar的父层...

网友评论

      本文标题:重学Vue--keep-alive的使用

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