淘先锋技术网

首页 1 2 3 4 5 6 7

生命周期是什么?

生命周期函数通俗的讲就是组件创建、组件更新、组件销毁的时候会触发的一系列的方法。当 Angular 使用构造函数新建一个组件或指令后,就会按下面的顺序在特定时刻调用这些生命周期钩子方法。

生命周期的顺序

当 Angular 使用构造函数新建一个组件或指令后,就会按下面的顺序在特定时刻调用这些生命周期钩子方法:

钩子用途及时机
ngOnChanges()@input属性(输入属性)发生变化时,会调用。非此属性,不会调用。当输入属性为对象时,当对象的属性值发生变化时,不会调用,当对象的引用变化时会触发。先于ngOnInit()调用。
ngOnInit()只执行一次,dom操作可放在其中。(最常用)
ngDoCheck()每次发生变更检测时会被调用
ngDoCheck()是Angular中的变更检测机制.它由 zone.js 来实现的.其行为是只要你的Angular中的某个组件发生异步事件.就会检查整个组件树,以保证组件属性的变化或页面的变化是同步的.所以 ngDoCheck() 的触发相当频繁的.并且是我们无法预料到的.也许我们在页面上的一个无意识操作,就会触发几个甚至几十个的 ngDoCheck() 生命周期钩子.
ngAfterContentInit()在组件内容初始化之后, ngDoCheck() 之后调用,只调用一次。
ngAfterContentChecked()内容投影:父组件写在子标签之间的内容会被渲染到子模板的ng-content中去,类似vue的slot,组件及子组件每次检查内容时调用,当父子组件都有该钩子时,父组件先执行。
ngAfterViewInit()当 Angular 初始化完组件视图及其子视图之后调用。第一次 ngAfterContentChecked() 之后调用,只调用一次。
ngAfterViewChecked()ngAfterViewInit() 和每次 ngAfterContentChecked() 之后调用。当父子组件都有该钩子时,子组件先执行。ngAfterViewChecked()ngAfterViewInt中不允许修改绑定的属性(@input属性),否则抛出异常
ngOnDestroy()每当 Angular 每次销毁指令/组件之前调用并清扫。 在这儿反订阅可观察对象和分离事件处理器,以防内存泄漏。在 Angular 销毁指令/组件之前调用。