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 相关文章推荐
JavaScript 精粹读书笔记(1,2)
Feb 07 Javascript
地址栏传递中文参数乱码在js里用escape转码
Aug 28 Javascript
简单实用的全选反选按钮例子
Oct 18 Javascript
使用focus方法让光标默认停留在INPUT框
Jul 29 Javascript
JavaScript中数组继承的简单示例
Jul 29 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
JS中setTimeout的巧妙用法前端函数节流
Mar 24 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
使用JS代码实现点击按钮下载文件
Nov 12 Javascript
js实现城市级联菜单的2种方法
Jun 23 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
Sep 06 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
May 28 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
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
JavaScript 数组运用实现代码
2010/04/13 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
自荐信包含哪些内容
2013/10/30 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
库房主管岗位职责
2013/12/31 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
高中校园广播稿
2014/10/21 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
高二化学教学反思
2016/02/22 职场文书
七年级作文之下雨天
2019/12/23 职场文书
python实现批量移动文件
2021/04/05 Python
一篇文章弄懂Python中的内建函数
2021/08/07 Python
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏