Vue的生命周期

70 阅读2分钟

生命周期总结起来一共有8个,4对成对出现:

  1. beforeCreate created 与数据监测,数据代理的创建相关
  2. beforeMount mounted 与数据的Vue编译相关
  3. beforeUpdate updated 与数据和页面的同步相关
  4. beforeDestroy destroyed Vue实例的销毁,调用vm.$destory()会触发这两个函数
// 此时,无法通过vm访问到data中的数据,methods中的方法
// 这里的create指的是数据代理和数据监测的创建
beforeCreate() {},

// 此时,可以通过vm访问到data中的数据,methods中配置的方法
created() {},


// 此时,页面呈现的是未经Vue编译的DOM结构
// 所有对DOM的操作,最终都不奏效
beforeMount() {},

// vue完成模板的解析并把初始的真实DOM元素放入页面后(挂载完毕)调用mounted 只会在初始解析时执行一次
// 此时,页面中呈现的都是经过Vue编译的DOM结构
// 所有对DOM的操作都有效(应该尽可能避免),至此,初始化过程结束
// 一般在此进行:开启定时器,发送网络请求,订阅消息,绑定自定义事件等初始化操作
// mount的过程是将内存中的 虚拟DOM 转为 真实DOM 插入页面的过程
mounted() {},



// 此时,数据是新的,但是页面是旧的,即:页面尚未和数据保持同步
beforeUpdate() {},

// 此时,数据是新的,页面也是新的,即页面和数据保持同步
// update的过程是根据新数据生成新的虚拟DOM,随后与旧的虚拟DOM进行比较,最终完成页面更新,即完成了Model->View的更新
updated() {},



// 此时,vm中所有的data,methods,指令等等,都处于可用状态,马上要执行销毁过程,
// 一般在此阶段,执行关闭定时器,取消订阅消息,解绑自定义事件等收尾操作
// 一般不会在此操作数据,及时操作了数据,也不会触发更新流程了
beforeDestroy() {
    // this.add() //方法也可调用,但页面不同步
    // this.name //属性可以访问,但是修改后页面不同步
},

// 销毁后借助vue开发者工具看不到任何信息
// 销毁后自定义事件会失效,但是原生DOM事件依然生效,比如click事件
destroyed() {},