OnDestory
定义:组件销毁前调用的最后一个钩子
用途:用于反订阅流,消除定时器
常在哪里出现:路由跳转时。当一个路由地址跳往另一个路由地址时,前一个路由地址对应的组件会被销毁,后一个路由对应的组件会被创建。
销毁时会触发:当应用发生变化,所有的check方法都会被调用
demo:
app.component.html
<a [routerLink]="['child']">子组件1</a>
<a [routerLink]="['child2']">子组件2</a>
<router-outlet></router-outlet>
child.component.ts
export class ChildComponent implements OnInit,OnDestroy {
constructor() { }
ngOnDestroy():void {
console.log('child组件销毁完毕');
}
}
运行图:
用户行为触发check钩子
用户行为会触发变更检测机制,一旦检测到发生了变更。当前组件树将会调用,其它未被销毁的组件中所有含有check关键字的钩子。
如果当前变化导致输入属性改变了,那么那个组件的ngOnChanges也会被调用
demo:
app.component.ts
export class AppComponent implements AfterContentInit,AfterContentChecked,AfterViewInit,AfterViewChecked {
ngOnInit(){
console.log('ngOnInit')
}
ngDoCheck() {
console.log('ngDoCheck');
}
ngAfterContentInit() :void{
console.log('ngAfterContentInit');
}
ngAfterContentChecked() :void{
console.log('ngAfterContentChecked');
}
ngAfterViewInit() :void{
console.log('ngAfterViewInit');
}
ngAfterViewChecked() :void{
console.log('ngAfterViewChecked');
}
}
运行图
周期钩子运行图
总结
使用带check关键字的钩子需谨慎,因为用户的行为,尽管视图没有改变,但会触发check钩子,会造成性能方面的问题
父子组件之间应该避免直接访问彼此的内部(如使用
@ViewChild()
),而应该通过输入输出属性来通讯,降低耦合性。- 组件可以通过输出属性发射自定义事件,这些事件可以携带任何你想携带的数据。
- 在没有父子关系的组件之间,尽量使用中间人模式进行通讯。
- 父组件可以运行时投影一个或多个模版片段到子组件中。
- 每个angular组件都提供了一组生命周期钩子,供你在某些特定的事件发生时执行相应的逻辑。
小年快乐。^ ^