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 相关文章推荐
新页面打开实际尺寸的图片
Aug 25 Javascript
由document.body和document.documentElement想到的
Apr 13 Javascript
Javascript中各种trim的实现详细解析
Dec 10 Javascript
jquery实现显示已选用户
Jul 21 Javascript
jquery实现动态画圆
Dec 04 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
Nov 13 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
Dec 10 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
Mar 22 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
Jul 23 Javascript
javascript实现小型区块链功能
Apr 03 Javascript
详解Vue数据驱动原理
Nov 17 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
PHP 和 HTML
2006/10/09 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
window.ActiveXObject使用说明
2010/11/08 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
[02:27]刀塔重生降临
2015/10/14 DOTA
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
浅谈对yield的初步理解
2017/05/29 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
对python中return与yield的区别详解
2020/03/12 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
基于keras中的回调函数用法说明
2020/06/17 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
详解python对象之间的交互
2020/09/29 Python
企业授权委托书范本
2014/04/02 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android
python绘制云雨图raincloud plot
2022/08/05 Python
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js