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 相关文章推荐
js tab 选项卡
Apr 26 Javascript
jQuery 判断元素上是否绑定了事件
Oct 28 Javascript
jquery中的sortable排序之后的保存状态的解决方法
Jan 28 Javascript
javascript开发技术大全 第4章 直接量与字符集
Jul 03 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
Nov 08 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
javascript移动开发中touch触摸事件详解
Mar 18 Javascript
浅谈JS中json数据的处理
Jun 30 Javascript
jquery 判断selection range 是否在容器中的简单实例
Aug 02 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
Jan 11 Javascript
手写Node静态资源服务器的实现方法
Mar 20 Javascript
详细聊聊vue中组件的props属性
Nov 02 Vue.js
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
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
微信小程序实现首页弹出广告
2020/12/03 Javascript
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
python和js交互调用的方法
2020/06/23 Python
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
PHP面试题及答案一
2012/06/18 面试题
HSRP的含义以及如何工作
2014/09/10 面试题
忠诚奉献演讲稿
2014/09/12 职场文书
生产实习心得体会范文
2016/01/22 职场文书