前端vue自学总结Week05——生命周期篇(上)

Vue实例生命周期

初始化阶段:初始化事件&生命周期(beforeCreate),初始化注入&检验(created)
模版编译阶段:
1、指定“el“,指定“template”选项,将template编译到render函数中
2、不指定"el",当调用vm.$mount(el)函数时,指定“template”选项,将template编译到render函数中
3、如果不指定“template”选项,将el外部的HTML作为template编译
挂载阶段:beforeMount,创建vm.$el,并用其替换“el”,mounted,
已挂载阶段:当data被修改时,beforeUpdate,虚拟Dom被重新渲染,updated
销毁阶段:当调用vm.$destroy()函数时,beforeDestroy,解除绑定销毁组件以及事件监听器,destroyed,销毁完毕。

初始化阶段( new Vue)

自述总结:就是给vue原型上绑定_init方法,那么_init方法干了啥事呢?首先把Vue实例赋值给变量vm,并且把用户传递的options和当前构造函数中的options属性及其父级构造函数的options属性进行合并,然后得到一个新的options选项,赋值给$options属性。
然后将$options挂载到Vue实例下,然后再调用一些初始化函数来为Vue实例初始化一些属性,事件,响应式数据等。
最后,所有的初始化工作都做完之后,判断用户是否传了el选项,如果传入了 ,则调用$mount函数进入到模版编译与挂载阶段。


初始化阶段(initLifecycle)


自述总结:
1、给实例上挂载$parent属性,如果当前组件不是抽象组件并且存在父级就往上循环,直到找到不是抽象类型的父级时,将其赋值vm.$parent,同时把该实例添加到父级的$children中。这样可以确保子组件的$parent可以访问到父组件实例,父组件的$children也能访问到子组件实例。
2、给实例上挂载$root函数,判断当前实例是否存在父级,如果存在,那么当前的根实例$root,就是父级的根实力$root属性,如果不存在,那么就是他自己。
最后挂载一些其他属性。

初始化阶段(initInjections)


目的:主要是用来初始化实例中的inject选项,通常inject和provide是成对出现的,他们的主要作用是允许祖先组件向其后代组件注入依赖,不管层次有多深。provide应该是一个对象或者返回一个对象函数,该对象中包含它要向子组件传递的属性。

自述总结:父组件提供key值,下游组件通过inject注入,拿到key对应的value值。

resolveInject函数的作用:inject选项中每一个数据项key都是由其上游组件提供的,所以根据key的值。从当前组件算起,不断向上游父组件中查找该数据key对应的值,直到找到为止,如果没有找到,那么就看是否设置了默认值,如果设置了就使用默认值,如果没有设置就抛出异常。


初始化阶段(initState)


自述总结:该函数是用于初始化实例状态,实例状态例如:props,data,methods,computed,watch等等。


首先给实例上注册属性_watchers,用来存储实例中所有的watcher实例。
紧接着判断实例中是否有props,有就调用初始化函数initProps去初始化props选项;依次对methods,data,computed,watch等也是同样操作。

未完待续........
 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值