vue的生命周期函数有哪些?

349 阅读1分钟

(1)vue的生命周期:
vue实例从创建到销毁的过程,也就是 从开始创建、初始化数据、编译模板、挂载DOM并渲 染、更新并渲染、卸载的过程。
(2)生命周期函数
a. beforeCreate
官网:在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
解释:这个时期,this变量还不能使用,在data下的数 据,和methods下的方法,watcher中的事件都 不能获得到; 作用: 在这个阶段可以做loading功能

data() {
  return {
    num:0
  }
}
methods: {
  show() {
    console.log('---')
  }
}
beforeCreate() {
  console.log(this.num) //undefined
  console.log(this.show)  //undefined
}

b. created
​ 官网:实例被创建完之后立即调用调用。在这一步,实 ​ 例已完成以下的配置:数据观测(data observer) ​ 属性和方法的运算, watch/event 事件回调。然 ​ 而,挂载阶段还没开始,$el 属性目前不可见。
​ 解释:这个时候可以操作vue实例中的数据和各种方 ​ 法,但是还不能对"dom"节点进行操作; ​ 作用:在这个阶段可以发送Ajax请求;可以把loading功能关掉

data() {
  return {
    num:0
  }
}
methods: {
  show() {
    console.log('---')
  }
}
beforeCreate() {
  console.log(this.num) //0
  console.log(this.show)  //---
}

​ c. beforeMount
​ 官网:在挂载开始之前被调用:相关的 render 函数 ​ 首次被调用。
​ d. mounted
​ 官网:实例被挂载后调用,这时 el 被新创建的 ​ vm.$el 替换了。如果根实例挂载到了一个文 ​ 档内的元素上,当 mounted 被调用时 vm.$el ​ 也在文档内。
​ 解释:挂载完毕,这时dom节点被渲染到文档内,一 ​ 些需要dom的操作在此时才能正常进行
​ 注意: mounted 不会保证所有的子组件也都一起被挂 ​ 载。如果你希望等到整个视图都渲染完毕,可以在 ​ mounted 内部使用 vm.$nextTick

mounted: function () {
  this.$nextTick(function () {
    // DOM更新完毕,this可以绑定到当前实例
  })
}

​ e. beforeUpdate
​ 官网:数据更新时调用,发生在虚拟 DOM 打补丁之 ​ 前。这里适合在更新之前访问现有的 DOM,比 ​ 如手动移除已添加的事件监听器。
​ f. updated
​ 官网:由于数据更改导致的虚拟 DOM 重新渲染和打 ​ 补丁,在这之后会调用该钩子。
​ 当这个钩子被调用时,组件 DOM 已经更新, ​ 所以你现在可以执行依赖于 DOM 的操作。然 ​ 而在大多数情况下,你应该避免在此期间更改 ​ 状态。如果要相应状态改变,通常最好使用算属性watcher 取而代之。
​ 注意:注意 updated 不会保证所有的子组件也都一 ​ 起被重绘。如果你希望等到整个视图都重绘完 ​ 毕,可以在 updated 里使用 vm.$nextTick

updated: function () {
  this.$nextTick(function () {
    // DOM更新完毕,this可以绑定到当前实例
  })
}

​ g. activated
​ 官网:被 keep-alive 缓存的组件激活时调用。
​ h. deactivated
​ 官网:被 keep-alive 缓存的组件停用时调用。
​ i. beforeDestroy
​ 官网:实例销毁之前调用。在这一步,实例仍然完全 ​ 可用。
​ j. destroyed
​ 官网:实例销毁后调用。该钩子被调用后,对应 Vue ​ 实例的所有指令都被解绑,所有的事件监听器 ​ 被移除,所有的子实例也都被销毁。