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 相关文章推荐
innerHTML,outerHTML,innerTEXT三者之间的区别
Jan 28 Javascript
javascript+xml技术实现分页浏览
Jul 27 Javascript
js 操作符实例代码
Oct 24 Javascript
简化版手机端照片预览组件
Apr 13 Javascript
Bootstrap轮播图的使用和理解4
Dec 14 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 Javascript
discuz表情的JS提取方法分析
Mar 22 Javascript
深入剖析Node.js cluster模块
May 23 Javascript
vue.js删除列表中的一行
Jun 30 Javascript
JavaScript实现的拼图算法分析
Feb 13 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
Sep 10 Javascript
vue 授权获取微信openId操作
Nov 13 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小教程之实现双向链表
2014/06/12 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
详解python单元测试框架unittest
2018/07/02 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
python实现抽奖小程序
2020/04/15 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
Python中and和or如何使用
2020/05/28 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
如何利用find命令查找文件
2015/02/07 面试题
音乐教学案例
2014/01/30 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
面试复试通知单
2015/04/24 职场文书
运动会广播稿200字
2015/08/19 职场文书
导游词之张家界
2019/10/31 职场文书
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS