本文转载于:https://blog.csdn.net/xum222222/article/details/80322532

转载仅供个人日后学习

https://www.cnblogs.com/jinzhenzong/p/7885643.html

keep-alive的作用主要是在组件切换时,保存组件的状态,防止重复渲染引发性能问题。比如:常见的列表页与详情页,当我们在列表页通过滚动鼠标寻找到自己感兴趣的标题时,点进去进入详情页,当浏览完详情页后返回到列表页,此时我们希望返回的列表页不是重新渲染后的列表页,而是我们之前滚动到的位置,keep-alive 就可以帮助我们缓存列表页的状态,实现上述效果。keep-alive起到一个缓存作用,用来保存页面的状态(包括数据、操作等)。

demo实践,感受keep-alive的作用
  demo中定义了两个组件,Page1和Page2。并通过路由实现了两个组件之间的切换。在page1页面的输入框中输入一些内容后,切换到page2页面,再从page2重新切换到page1时,通过keep-alive可以实现输入框中的内容保持不变。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>keep-alive</title>
</head>
<body>
<div id="app">
<router-link to="/page1">page1</router-link>
<router-link to="/page2">page2</router-link>
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
</div>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vue-router"></script>
<script>
const Page1 = Vue.extend({
template: `<div class="page1">
<h1>page1</h1>
<input type="text" />
</div>
`,
})
const Page2 = Vue.extend({
template: `<div class="page2">
<h1>page2</h1>
</div>
`,
}) const routes = [
{
path: '/page1',
component: Page1,
meta: {
keepAlive: true,
}
},
{
path: '/page2',
component: Page2,
meta: {
keepAlive: false,
}
},
] const router = new VueRouter({
routes,
}) const app = new Vue({
router
}).$mount('#app')
</script>
</body>
</html>
---------------------
  • 代码copy到编辑器中保存为.html文件,用浏览器打开观察结果。

上述demo中,通过在路由时,为组件Page1Page2设置meta的keepAlive状态来控制组件是否需要缓存。

vue中的keep-alive的更多相关文章

  1. vue中如何不通过路由直接获取url中的参数

    前言:为什么要不通过路由直接获取url中的参数? vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接 ...

  2. vue中的重要特性

    一.vue中的自定义组件 html的代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  3. Vue中comoputed中的数据绑定

    Vue中的数据实现响应式绑定是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集依赖项,当数据发生变化时在set中通过调用dep. ...

  4. vue中使用stompjs实现mqtt消息推送通知

    最近在研究vue+webAPI进行前后端分离,在一些如前端定时循环请求后台接口判断状态等应用场景用使用mqtt进行主动的消息推送能够很大程度的减小服务端接口的压力,提高系统的效率,而且可以利用mqtt ...

  5. Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理

    基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...

  6. vue中watched属性

    watched属性,vue中的观察属性,可用来监听一个值的变化 默认有两个参数,新值,旧值 data (){ return { currentCity: "深圳" } } watc ...

  7. 七、vue中v-for有时候对页面不会重新渲染,数组变化后如何到渲染页面

      v-for不能进行双向数据绑定,页面渲染完成后,再次更改v-for遍历的数据,js里面打印的数据看到数据值已经更改,但是页面的数据就是没有渲染,这是为什么呢? vue中v-for和angularj ...

  8. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...

  9. vue中数据双向绑定的实现原理

    vue中最常见的属v-model这个数据双向绑定了,很好奇它是如何实现的呢?尝试着用原生的JS去实现一下. 首先大致学习了解下Object.defineProperty()这个东东吧! * Objec ...

  10. Vue中之nextTick函数源码分析

    Vue中之nextTick函数源码分析 1. 什么是Vue.nextTick()?官方文档解释如下:在下次DOM更新循环结束之后执行的延迟回调.在修改数据之后立即使用这个方法,获取更新后的DOM. 2 ...

随机推荐

  1. 【转】数据处理常用的sql语句整理

    一下语句都是基于 mysql数据库 查询是否使用索引 explain  select * FROM t_table1; 结果列的含义: table:此次查询操作是关联哪张数据表 type:连接查询操作 ...

  2. Unity用Vuforia做AR实现脱卡效果

    这篇不错,记录下,博主不让转载 http://blog.csdn.net/qwe161819/article/details/76107105

  3. python python中那些双下划线开头的那些函数都是干啥用用的

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

  4. php 版本升高后 会出现 之Deprecated: Function ereg_replace() is deprecated的解决方法

    这个问题是因为php版本过高. 在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用.有两个方案可以解决以上问题: 1.把php版本换到v5.3下. 2.继续使用v5. ...

  5. java面向对象总结(一)

    1. 对象的概念及面向对象的三个基本特征 面向对象的三大核心特性 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率.面向对象程序设计有以下优点. ...

  6. day10-11-python基础之字符串

    1.开发工具 python开发IDE: pycharm.eclipse # 专业版 # 不要汉化 2.运算符 结果是值 算数运算 a = 10 * 10 赋值运算 a = a + 1 a+=1 结果是 ...

  7. 用Python实现一个词频统计(词云+图)

    第一步:首先需要安装工具python 第二步:在电脑cmd后台下载安装如下工具: (有一些是安装好python电脑自带有哦) 有一些会出现一种情况就是安装不了词云展示库 有下面解决方法,需看请复制链接 ...

  8. Java RSA 公钥加密私钥解密

    package com.lee.utils; import java.io.DataInputStream; import java.io.File; import java.io.FileInput ...

  9. MYSQL数据库常用操作命令

    1.连接MYSQL: mysql -h 主机地址 -u 用户名 -p 2.修改密码: 安装后第一次登录使用: mysqladmin (因为没有初始密码) 修改原密码: mysqladmin -u ro ...

  10. javaweb闲暇小程序之抽签程序

    学自潭州学院视频 主程序页面截图 <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...