vue组件 keep-alive 和 transition 使用详解


Posted in Javascript onOctober 11, 2019

1.keep-alive

能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。

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

当组件在 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。

include: 字符串或正则表达式。只有匹配的组件会被缓存。
exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。

// 组件

export default {
 name: 'test-keep-alive',
 data () {
  return {
    includedComponents: "test-keep-alive"     //这句不能漏掉
  }
 }
}

<keep-alive include="test-keep-alive">
 <!-- 将缓存name为test-keep-alive的组件 -->
 <component></component>
</keep-alive>

<keep-alive include="a,b"> 
<!-- 将缓存name为a或者b的组件,结合动态组件使用 --> 
<component :is="view"></component> 
</keep-alive> 
<!-- 使用正则表达式,需使用v-bind --> 
<keep-alive :include="/a|b/"> 

<component :is="view"></component> 
</keep-alive>

结合router使用

这一段通常放在vue项目最外层的app.vue中 为了使所有组件都能很好的利用 这个是否需要缓存特性

//需要缓存时
<keep-alive>
  <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
//不需要缓存时
<router-view v-if="!$route.meta.keepAlive"></router-view>
//两组同时启用,只要在路由meta元信息中 对keepAlive定义,就能自主控制是否需要缓存

//...router.js
export default new Router({
 routes: [
  {
   path: '/',
   name: 'Hello',
   component: Hello,
   meta: {
    keepAlive: false // 不需要缓存
   }
  },
  {
   path: '/page1',
   name: 'Page1',
   component: Page1,
   meta: {
    keepAlive: true // 需要被缓存
   }
  }
 ]
})

2.transition

name - string,用于自动生成 CSS 过渡类名。例如:name: ‘fade' 将自动拓展为.fade-enter,.fade-enter-active等。默认类名为 “v”

元素作为单个元素/组件的过渡效果。 只会把过渡效果应用到其包裹的内容上,而不会额外渲染 DOM 元素,也不会出现在检测过的组件层级中。

Vue只有在插入,更新或者移除DOM元素时才会应用过渡效果。一般两类情况一个是利用CSS过渡或者动画,另一个是利用JavaScript钩子函数。

!-- 首先将要过渡的元素用transition包裹,并设置过渡的name,然后添加触发这个元素过渡的按钮(实际项目中不一定是按钮,任何能触发过渡组件的DOM操作的操作都可以) -->

<div>
 <button @click="show=!show">show</button>
 <transition name="fade">
  <p v-show="show">hello</p>
 </transition>
</div>

&.fade-enter-active, &.fade-leave-active
 transition: all 0.5s ease   
&.fade-enter, &.fade-leave-active
 opacity: 0

组件过渡过程中,会有四个CSS类名进行切换,这四个类名与上面transition的name属性有关,比如name=“fade”,会有如下四个CSS类名:

fade-enter:进入过渡的开始状态,元素被插入时生效,只应用一帧后立即删除;

fade-enter-active:进入过渡的结束状态,元素被插入时就生效,在过渡过程完成之后移除;

fade-leave:离开过渡的开始状态,元素被删除时触发,只应用一帧后立即删除;

fade-leave-active:离开过渡的结束状态,元素被删除时生效,离开过渡完成之后被删除;

从上面四个类名可以看出,fade-enter-activefade-leave-active在整个进入或离开过程中都有效,所以CSS的transition属性在这两个类下进行设置。

上面示例中,fade-enter和fade-leave-active类设置CSS为opacity:0,说明过渡刚进入和离开的时候透明度为0,即不显示。当然还可以设置其他的CSS属性

总结

以上所述是小编给大家介绍的vue组件 keep-alive 和 transition 使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
JQuery以JSON方式提交数据到服务端示例代码
May 05 Javascript
javascript搜索框点击文字消失失焦时文本出现
Sep 18 Javascript
js实现精美的图片跟随鼠标效果实例
May 16 Javascript
js实现将选中值累加到文本框的方法
Aug 12 Javascript
举例讲解jQuery中可见性过滤选择器的使用
Apr 18 Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 Javascript
vue.js利用Object.defineProperty实现双向绑定
Mar 09 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
Mar 07 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
Jul 29 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
Jan 25 Javascript
jquery将json转为数据字典的实例代码
Oct 11 #jQuery
JavaScript实现抖音罗盘时钟
Oct 11 #Javascript
javascript刷新父页面方法汇总详解
Oct 10 #Javascript
element form 校验数组每一项实例代码
Oct 10 #Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 10 #Javascript
js判断复选框是否选中的方法示例【基于jQuery】
Oct 10 #jQuery
VUE注册全局组件和局部组件过程解析
Oct 10 #Javascript
You might like
福利彩票幸运号码自动生成器
2006/10/09 PHP
php中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
Android中的jQuery:AQuery简介
2014/05/06 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
详解Node 定时器
2018/02/26 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python如何实现视频转代码视频
2019/06/17 Python
python实现按关键字筛选日志文件
2019/12/24 Python
tensorflow 模型权重导出实例
2020/01/24 Python
python中元组的用法整理
2020/06/15 Python
Python如何对XML 解析
2020/06/28 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
乡镇交通安全实施方案
2014/03/29 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
校园广播稿范文
2015/08/19 职场文书