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 检测浏览器类型和版本的代码
Sep 15 Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
Feb 07 Javascript
JS应用正则表达式转换大小写示例
Sep 18 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
Oct 28 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
Vue绑定内联样式问题
Oct 17 Javascript
js tab栏切换代码实例解析
Sep 03 Javascript
axios实现文件上传并获取进度
Mar 25 Javascript
vue中使用GraphQL的实例代码
Nov 04 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分页类的代码
2011/05/18 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
python字符类型的一些方法小结
2016/05/16 Python
Python创建xml文件示例
2017/03/22 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Python如何将字符串转换为日期
2020/07/31 Python
python 如何将office文件转换为PDF
2020/09/22 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
企业内控岗位的职责
2014/02/07 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
爱心募捐通知范文
2015/04/27 职场文书
放飞理想主题班会
2015/08/14 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书