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 相关文章推荐
jquery实现控制表格行高亮实例
Jun 05 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
简介alert()与console.log()的不同
Aug 26 Javascript
Angular实现form自动布局
Jan 28 Javascript
JavaScript奇技淫巧44招【实用】
Dec 11 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
Feb 22 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
vue-自定义组件传值的实例讲解
Sep 18 Javascript
详解如何在Vue项目中导出Excel
Apr 19 Javascript
Vue 3.0 全家桶抢先体验
Apr 28 Javascript
原生js实现滑块区间组件
Jan 20 Javascript
JavaScript严格模式不支持八进制的问题讲解
Nov 07 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
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
浅谈python中的占位符
2017/11/09 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
幼儿园义卖活动方案
2014/01/17 职场文书
高二英语教学反思
2014/01/19 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
2014年度工作总结报告
2014/12/15 职场文书
全民创业工作总结
2015/08/13 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis