1.ngonInit 和constructor的区别?
constructor是ES6引入类的概念后新出现的东西,是类的自身属性,并不属于Angular的范畴,所以Angular没有办法控制constructor。而ngOnInit用于在Angular第一次显示数据绑定和设置指令/组件的输入属性之后,初始化指令/组件。
constructor的主要作用是注入依赖,注入后就可以作为类的属性被使用了。ngOnInit纯粹是通知开发者组件/指令已经被初始化完成了,此时组件/指令上的属性绑定操作以及输入操作已经完成,也就是说在ngOnInit函数中我们已经能够操作组件/指令中被传入的数据了,所以我们可以在ngOnInit中做一些初始化操作。
2.ngonChange什么时候触发?
时机:当被绑定的输入属性的值发生变化时调用,不过首次调用是会发生在ngOnInit()之前的。当然必须是父组件使子组件输入属性值变化时才会调用,子组件自己改变输入属性的值不会调用。
ngOnChanges()方法获取了一个对象,它可以同时观测多个绑定的属性值,它把每个发生变化的属性名都映射到了一个SimpleChange对象, 该对象中有属性的当前值和前一个值。
触发条件:@input属性(输入属性)发生变化时,会调用。非此属性,不会调用。当输入属性为对象时,当对象的属性值发生变化时,不会调用,当对象的引用变化时会触发。
3.什么时候该用onDestory?
Angular每次销毁组件/指令前会调用这个方法,通常在ngOnDestroy()里我们会对一些可观察对象进行取消订阅,对定时器进行取消等,防止内存泄漏。