Vue的生命周期函数

vue的一生:

人从出生到童年、青年、壮年、不惑,到死亡。会经历不同的时期。vue实例也不例外。
每个vue实例从创建到销毁的过程就是vue的一个生命周期,每个阶段都有对应的钩子函数,当我们想在vue的不同时期操作vue实例是,就可以在不同的钩子函数中进行

要知道vue的生命周期是什么,主要从以下几个方面来讲:

1.vue的生命周期是什么

2.vue生命周期的在项目中的执行顺序

3.vue中内置的方法 属性和vue生命周期的运行顺序(methods、computed、data、watch)

4.自己构造的方法与vue生命周期的运行顺序 如show这些

5.总结


一、vue的生命周期是什么

 vue每个组件都是独立的,每个组件都有一个属于它的生命周期,从一个组件创建、数据初始化、挂载、更新、销毁,这就是一个组件所谓的生命周期。

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed

如图:

二、vue生命周期的在项目中的执行顺序

通过打印数据来看这几个钩子函数的执行顺序。

在data里面设置的数据:

data () {

    return {

    rendered: false,

    }

}

1、beforeCreated

这个时候this还不能使用,data中的数据、methods中的方法,以及watcher中的事件都不能获得。

beforeCeate(){

    console.log(this.rendered);    // undefined  

}

2、created
这个时候可以操作vue中的数据和方法,但是还不能对dom节点进行操作。

 

created() {

    console.log(this.$el);//undefined

    console.log(this.rendered);  // false

 

   

}

3、beforeMount
在挂载开始之前被调用:相关的render 函数首次被调用。
说明:$el属性已存在,是虚拟dom,只是数据未挂载到模板中。

beforeMount() {

    console.log(this.$el);//undefined

     

4、mounted

挂载完毕,这时dom节点被渲染到文档内,dom操作在此时能正常进行

.mounted() {

    console.log(this.$el);

}

5、beforeUpdate

数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。

beforeUpdate是指view层的数据变化前,不是data中的数据改变前触发。因为Vue是数据驱动的。

6、updated

当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher取而代之。
注意 updated 不会承诺所有的子组件也都一起被重绘。如果你希望等到整个视图都重绘完毕,可以用 vm.$nextTick替换掉 updated:
说明:view层的数据更新后,data中的数据同beforeUpdate,都是更新完以后的。

7 .beforeDestroy
官方解释:实例销毁之前调用。在这一步,实例仍然完全可用。

beforeDestroy(){

    console.log(this.$el);

    console.log(this.rendered); 

}

8、destroyed

Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
说明:执行destroy方法后,对data的改变不会再触发周期函数,此时的vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在。

destroyed() {

    console.log(this.$el);

    console.log(this.rendered);

三、vue中内置的方法 属性和vue生命周期的运行顺序(methods、computed、data、watch、props)

 从第一二点可知道data的初始化是在created时已经完成数据观测(data observer),并且诸如methods、computed属性 props等已经初始化;

那问题来了,data props computed watch methods他们之间的生成顺序是什么呢?

props => methods =>data => computed => watch;

四、总结

beforecreate:可以在这加个loading事件
created :在这结束loading,还做一些初始化,实现函数自执行
mounted : 在这发起后端请求,拿回数据,配合路由钩子做一些事情
destoryed :当前实例已被销毁,解绑相关指令和事件监听器

重点:父子组件嵌套时触发钩子函数顺序

组件挂载阶段

父组件beforeCreate=>>父组件created=>>父组件beforeMount=>>子组件beforeCreate=>>子组件created=>>子组件beforeMount=>>子组件mounted=>>父组件mounted

即从创建到挂载,是从外到内,再从内到外

组件更新阶段

父组件beforeUpdate=>>父组件updated

组件销毁阶段

父组件beforeDestroy=>>子组件beforeDestroy=>>子组件destroyed父组件destroyed

即销毁是从外到内,再从内到外
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值