Vue的生命周期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue的生命周期相关的知识,希望对你有一定的参考价值。

参考技术A Vue生命周期分为四个阶段:创建、挂载、更新、销毁。

所有的生命周期钩子自动绑定this上下文到实例中,因此你可以访问数据,对属性和方法进行运算。

在实例初始化之后,组件创建、数据观测(data observer)和 event/watcher 事件配置之前调用。
此时访问不到实例中的数据。

打印顺序:

在实例创建完成后被立即调用。
在这一步,实例已完成以下配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。
若要在第一时间调用methods中的方法,或操作data中数据,可以在此钩子中操作。
注意:执行此钩子时,还未渲染成html模板,挂载阶段还未开始,$el属性目前不可见。
此时,可以进行数据初始化和初始化页面的请求,将请求回来的数据赋值给data中的数据。

打印顺序:

在挂载开始之前被调用,此时模板已经编译完成,只是未将生成的模板替换el对应的元素。
在此钩子函数中,可以获取到模板最初始的状态。
此时,可以拿到vm. $el,只不过为旧模板。

el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。其中的vm.$el为新模板。
执行完该钩子函数后,代表实例已经被完全创建好。filter也在这里生效。
若要在第一时间操作页面上的dom节点,可以在此钩子函数中操作。

数据更新时调用,发生在虚拟DOM打补丁之前,此时数据已更新,但是DOM未同步更新。

数据更改导致DOM重新渲染和打补丁,之后会执行该钩子函数。此时数据和dm同步。
此时组件DOM已更新,可用执行依赖于DOM的操作,但多数情况下,应避免在此期间更改状态,最好使用计算属性或watcher。updated监控组件里所有数据的变化。

实例销毁之前调用。在这一步,实例仍然完全可用。
可用在该钩子函数中,清除定时器,防止内存泄漏。
调用 vm.$destroy() 销毁实例后,定时器被清除,若没有在此钩子函数中清除定时器,则定时器仍然存在。

Vue实例销毁后调用。实例的所有指令和事件监听器都会解绑。

vue中的生命周期的个人理解

参考技术A #### 生命周期

###  生命周期的钩子函数

##  vm.$el

  一个实例属性。是根的DOM对象(挂载点元素#app的DOM对象)

##  vm.$destroy()

  一个实例方法。销毁实例的,一般不使用

  调用之后会触发beforDestroy和destroyed两个生命周期的钩子函数

## vm.data

  一个实例属性。当前实例中data选项中定义的数据

#### 生命周期可以分为三个大阶段

  1.初始化挂载阶段

    1.beforeCreate

    2.createed

    3.beforeMount

    4.mounted 

  2.更新阶段

    5.beforeUpdate

    6.updated 

  3.销毁阶段

    7.beforeDestroy

    8.destroyed

#### 生命周期的狗子函数有

  1.beforeCreate  实例创建之前                  触发一次

  2.created      实例创建完成                  触发一次

  3.beforeMount    实例挂载到页面之前  挂在前     触发一次

  4.mounted       实例挂载到页面之后  挂载完成   触发一次

  5.beforeUpdate   实例数据更新之前              可能触发多次

  6.updated       实例数据更新完成  页面得到更新 可能触发多次

  7.beforeDestroy  实例销毁之前                  触发一次

  8.destroyed     实例销毁                      触发一次

## beforeCreate

  实例创建之前

  1.获取不到vm.$el

  2.获取不到vm.$data(因为获取不到data数据,无法赋值,所以这里不好做ajax请求)

  3.一帮没什么大用,不用去操作它

  4.一个生命周期中只会触发一次

## created

  实例创建完成

  1.获取不到vm.$el

  2.能获取到data选项中的数据,能调用methods选项中的函数了

  3.一个生命周期中只会触发一次

  4.在这里发送ajax请求,获取页面初一打开就需要的数据,

## beforeMount

  实例挂载之前

  挂载的意思是:vue解析模板数据完成,并替换到真实的DOM上面

    1.通过vm.$el获取不到真实的DOM(页面渲染的DOM)

    2.可以获取data

    3.一个生命周期中只会触发一次

    4.一般没什么大用,不用去操作它

## mounted

  实例挂载完成

  1.能够获取到真实DOM

  2.可以获取data和methods

  3.一个生命周期中只会触发一次

  4.初始化与DOM相关的操作,需要放在这儿,比如Swiper的实例化

## beforeUpdate

  实例更新之前

  1.能拿到数据更新之前的DOM,但是得不到数据更新之后的DOM

  2.一个生命周期过程中,可能会触发多次

  3.不要在这里去修改数据,也不要去发送异步请求(会死循环,修改数据后就会再次执行这里)

  4.一般没什么大用,不用去操作它

## updated

  实例更新之后

  1.能获取到数据更新之后的DOM

  2.一个生命周期过程中,可能会触发多次

  3.不要在这里去修改数据,也不要去发送异步请求(会死循环,修改数据后就会再次执行这里)

  4.一般用于真实DOM更新之后的再次操作,比如Swiper的更新

## beforeDestroy

  实例销毁之前

  1.做一些销毁工作,比如计时器的清除,全局事件绑定的销毁等工作

## destroyed

  实例销毁完成

  1.解除数据绑定、数据监听

  2.没什么大用,不用去操作它

## vm.$mount(el)

一个 实例方法

手动调用它来挂载页面

## template

  1.template作为包裹元素来使用

  2.template 配置选项

    如果有template选项,name就使用template选项的内容作为模板,后续解析完成去替代挂载点元素

    如果没有template选项,那么久使用el指定的元素内容作为模板

    如果都有优先template

以上是关于Vue的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Vue 啥是生命周期

vue学习生命周期

Vue生命周期简述

Vue生命周期简述

vue生命周期是啥,有啥作用

vue中的生命周期的个人理解