Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算。这意味着你不能使用箭头函数来定义一个生命周期方法。这是因为箭头函数绑定了父上下文,因此this与你期待的Vue实例不同。

1、beforeCreate

  在实例初始化之后,数据观测和event/watcher时间配置之前被调用。
  
2、created

  实例已经创建完成之后被调用。在这一步,实例已经完成以下的配置:数据观测,属性和方法的运算,watch/event事件回调。然而,挂载阶段还没开始,$el属性目前不可见。
  
3、beforeMount

  在挂载开始之前被调用:相关的render函数首次被调用。
  该钩子在服务器端渲染期间不被调用。
  
4、mounted

el被新创建的 vm.$el替换,并挂在到实例上去之后调用该钩子函数。如果root实例挂载了一个文档内元素,当mounted被调用时vm.$el也在文档内。该钩子在服务端渲染期间不被调用。
  
5、beforeUpdate

  数据更新时调用,发生在虚拟DOM重新渲染和打补丁之前。
  你可以在这个钩子中进一步第更改状态,这不会触发附加的重渲染过程。
  该钩子在服务端渲染期间不被调用。
  
6、updated

  由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。
  当这个钩子被调用时,组件DOM已经更新,所以你现在可以执行依赖于DOM的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
  该钩子在服务端渲染期间不被调用。
  
7、activated

  keep-alive组件激活时调用。
  该钩子在服务器端渲染期间不被调用。
  
8、deactivated

  keep-alive组件停用时调用。
  该钩子在服务端渲染期间不被调用。
  
9、beforeDestroy 【类似于React生命周期的componentWillUnmount】

  实例销毁之间调用。在这一步,实例仍然完全可用。
  该钩子在服务端渲染期间不被调用。
  
10、destroyed

  Vue实例销毁后调用。调用后,Vue实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

  

含有keep-alive 生命周期钩子:

在被keep-alive包含的组件/路由中,会多出两个生命周期的钩子: activated 与 deactivated。
在 2.2.0 及其更高版本中,activated 和 deactivated 将会在 树内的所有嵌套组件中触发。

activated在组件第一次渲染时会被调用,之后在每次缓存组件被激活时调用。


activated调用时机:

第一次进入缓存路由/组件,在mounted后面,beforeRouteEnter守卫传给 next 的回调函数之前调用:

    beforeMount=> 如果你是从别的路由/组件进来(组件销毁destroyed/或离开缓存deactivated)=>mounted=> activated 进入缓存组件 => 执行 beforeRouteEnter回调

因为组件被缓存了,再次进入缓存路由/组件时,不会触发这些钩子:

   // beforeCreate created beforeMount mounted 都不会触发。

所以之后的调用时机是:

 组件销毁destroyed/或离开缓存deactivated => activated 进入当前缓存组件 => 执行 beforeRouteEnter回调// 组件缓存或销毁,嵌套组件的销毁和缓存也在这里触发

deactivated:组件被停用(离开路由)时调用

使用了keep-alive就不会调用beforeDestroy(组件销毁前钩子)和destroyed(组件销毁),因为组件没被销毁,被缓存起来了。
这个钩子可以看作beforeDestroy的替代,如果你缓存了组件,要在组件销毁的的时候做一些事情,你可以放在这个钩子里。
如果你离开了路由,会依次触发:

 组件内的离开当前路由钩子beforeRouteLeave =>  路由前置守卫 beforeEach =>全局后置钩子afterEach => deactivated 离开缓存组件 => activated 进入缓存组件(如果你进入的也是缓存路由)// 如果离开的组件没有缓存的话 beforeDestroy会替换deactivated // 如果进入的路由也没有缓存的话  全局后置钩子afterEach=>销毁 destroyed=> beforeCreate等

关于生命周期钩子需要注意的内容:

  • ajax请求最好放在created里面,因为此时已经可以访问this了,请求到数据就可以直接放在data里面。
    这里也碰到过几次,面试官问:ajax请求应该放在哪个生命周期。

  • 关于dom的操作要放在mounted里面,在mounted前面访问dom会是undefined。

  • 每次进入/离开组件都要做一些事情,用什么钩子:

    (1)不缓存:
    进入的时候可以用created和mounted钩子,离开的时候用beforeDestory和destroyed钩子,beforeDestory可以访问this,destroyed不可以访问this。

    (2)缓存了组件:
    缓存了组件之后,再次进入组件不会触发beforeCreate、created 、beforeMount、 mounted,如果你想每次进入组件都做一些事情的话,你可以放在activated进入缓存组件的钩子中。
    同理:离开缓存组件的时候,beforeDestroy和destroyed并不会触发,可以使用deactivated离开缓存组件的钩子来代替。


触发钩子的完整顺序:

将路由导航、keep-alive、和组件生命周期钩子结合起来的,触发顺序,假设是从a组件离开,第一次进入b组件:

1- beforeRouteLeave:路由组件的组件离开路由前钩子,可取消路由离开。

2- beforeEach: 路由全局前置守卫,可用于登录验证、全局路由loading等。

3- beforeEnter: 路由独享守卫

4- beforeRouteEnter: 路由组件的组件进入路由前钩子。

5- beforeResolve:路由全局解析守卫

6- afterEach:路由全局后置钩子

7- beforeCreate:组件生命周期,不能访问this。

8- created:组件生命周期,可以访问this,不能访问dom。

9- beforeMount:组件生命周期

10- deactivated: 离开缓存组件a,或者触发a的beforeDestroy和destroyed组件销毁钩子。

11- mounted:访问/操作dom。

12- activated:进入缓存组件,进入a的嵌套子组件(如果有的话)。

13- 执行beforeRouteEnter回调函数next。

vue组件的生命周期和执行过程相关推荐

  1. vue父子组件生命周期执行顺序_关于Vue组件的生命周期及执行顺序

    本文主要讲述了:Vue组件渲染时的生命周期及执行顺序 Vue组件数据变更时的生命周期及执行顺序 Vue组件嵌套时的生命周期及执行顺序 正文 组件渲染时的生命周期 在组件渲染时,每个Vue组件都有4个生 ...

  2. Vue组件的生命周期以及钩子函数的作用

    什么叫做生命周期 一个组件从创建到销毁的过程叫做组件生命周期. Vue在生命周期中提供了一些函数可以在其内部实现一些业务逻辑并且这些函数会在一些特定的场合下执行. 组件的生命周期钩子函数大致可以分为三 ...

  3. Vue组件的生命周期

    1 beforeCreate () { 2 console.log("beforeCreate 创建前状态===============组件1") 3 }, 4 created() ...

  4. vue组件及生命周期

    vue组件 组件的定义注册使用 定义:const stepper = { template:`` } 注册: components:{ steper} 使用:<steper></st ...

  5. vue实例的生命周期详解

    Vue实例的生命周期 简介 此篇文章说的是最简单的单个VUE组件的生命周期. 官网中的长图诠释了Vue实例从创建,运行到销毁的整个过程.从vue实例的创建,运行,销毁期间,总是伴随着各种各样的事件,这 ...

  6. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...

    昨日内容回顾 0. 组件注意事项!!!data属性必须是一个函数!1. 注册全局组件Vue.component('组件名',{template: ``})var app = new Vue({el: ...

  7. vue的组件的生命周期

    在vue的官网上,有一个很难懂的图,还是英文的········ 简单总结一下,方面处理数据和渲染dom 第一个:单独组件的生命周期: beforeCreate:dom和data以及motheds未定义 ...

  8. 父子组件的生命周期执行顺序

    父子组件的生命周期执行顺序 1.父子组件的生命周期运行顺序根据在其对应的钩子函数中的打印日志可得到如下顺序: 父beforeCreate-> 父create -> 子beforeCreat ...

  9. Vue入门指南-05 Vue实例的生命周期(快速上手vue)

    生命周期钩子 = 生命周期函数 = 生命周期事件 实例创建期间的生命周期函数 // 刚初始化了一个空的实例对象, 这时候只有默认的一些生命周期函数和默认事件, 其他都未创建. // 如果要调用 met ...

最新文章

  1. java 正则_认识正则表达式(Java语言基础)
  2. 苹果后门、微软垄断与Linux缺位
  3. C#机房重构-总结(三)
  4. Understanding transient variables in Java and how they are practically used in HashMap---reference
  5. docker安装Jenkins+BlueOcean
  6. hbase命令行演示
  7. 快递100接口的调用过程
  8. Spring→面向切面编程AOP、相关概念、通知Advice类型、配置切面切入点通知、AOP相关API、AOP代理类ProxyFactoryBean、AOP注解@AspectJ
  9. OPC 学习交流感想
  10. 物理内存管理之zone详解
  11. VTK:图像平滑——中值滤波器
  12. “目标-用户-指标”——企业开源运营之道|瞰道@谭中意
  13. C语言小游戏-俄罗斯方块
  14. WhereDidMyTimeGo - 一款帮你记录每天的时间分配的MacOS app
  15. 偷得假期半日闲,只羡鸳鸯不羡仙
  16. “耀星计划”之华为信用钱包,覆盖HMS生态多领域
  17. python -pandas
  18. 怎样架设游戏服务器 怎样搭建一个属于自己的游戏服 5分钟学会游戏架设 3D手游搭建视频教程 自己做游戏GM
  19. 把Ubuntu主机加入Window工作组
  20. 电脑鸿蒙系统怎么连接无线网,三星笔记本电脑怎么连接无线网wifi

热门文章

  1. 【从传统方法到深度学习】图像分类
  2. 深入浅出学Hive:Hive QL
  3. Python自动生成10000个java类使用APT注解后引发的问题
  4. POST方式发起下载请求
  5. 面向对象的三大特性————继承,多态
  6. redhat7.0配置网卡
  7. 《Kali Linux 渗透测试技术详解》笔记之 metasploit 学习纪要
  8. 线性表的链式存储结构(C语言版)
  9. WEB开发中的页面跳转方法总结
  10. Oracle查找Web执行SQL