Vue中 key keep-alive的实现原理


Posted in Javascript onSeptember 18, 2018

vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗

keep-aliv是Vue.js的一个内置组件。它能够不活动的组件实例保存在内存中,而不是直接将其销毁,它是一个抽象组件,不会被渲染到真实DOM中,也不会出现在父组件链中。

它有两个生命周期:

  1. activated: keep-alive组件激活时调用
  2. deactivated: keep-alive组件停用时调用

它提供了include与exclude两个属性,允许组件有条件地进行缓存。

keep-alive key

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script type="text/javascript" src="./vue.js"></script>
</head>
<body>
  <div id="app">
    <keep-alive>
      <child-component key="1" v-if="seen" name="1"></child-component>
      <child-component key="2" v-if="!seen" name="2"></child-component>
    </keep-alive>
    <button @click="toggle">toggle</button>
  </div>
  <script type="text/javascript">
    Vue.component('child-component', {
      template: `<input type="text" placeholder="enter">`,
      data() {
        return {}
      },
      props: ["name"],
      mounted() {
        console.log(`${this.name} mounted`)
      }
    })
    const vm = new Vue({
      el: "#app",
      data: {
        seen: true
      },
      methods: {
        toggle() {
          this.seen = !this.seen;
        }
      }
    })
  </script>
</body>
</html>

key是标识元素不再被复用,注意key是Vue中的一个保留的属性,不能作为prop传递给子组件,否则会在控制台看到Vue的报错

但是keep-alive标识不重复创建组件实例,也就是只会触发一次created mounted事件,

利用两者可以对组件的复用进行比较精细的管理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
你需要知道的10个最佳javascript开发实践小结
Apr 15 Javascript
jquery ui dialog实现弹窗特效的思路及代码
Aug 03 Javascript
JavaScript控制table某列不显示的方法
Mar 16 Javascript
jquery实现仿新浪微博评论滚动效果
Aug 06 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
Jul 11 Javascript
JS解析url查询参数的简单代码
Aug 06 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
Aug 16 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 Javascript
JS校验与最终登陆界面功能完整示例
Jan 13 Javascript
openlayers实现地图弹窗
Sep 25 Javascript
原生JS实现相邻月份日历
Oct 13 Javascript
一篇文章学会Vue中间件管道
Jun 20 Vue.js
vue服务端渲染页面缓存和组件缓存的实例详解
Sep 18 #Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
Sep 18 #Javascript
vue服务端渲染添加缓存的方法
Sep 18 #Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 #Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 #Javascript
在小程序中使用canvas的方法示例
Sep 17 #Javascript
webpack4打包vue前端多页面项目
Sep 17 #Javascript
You might like
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
深入php多态的实现详解
2013/06/09 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
高三体育教学反思
2014/01/29 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
现货白银电话营销话术
2015/05/29 职场文书