Angular学习笔记(十九)周期钩子之OnDestroy

本文详细介绍了Angular中OnDestroy生命周期钩子的作用,它在组件销毁前被调用,常用于反订阅流和清除定时器。在路由跳转时,前一个组件会被销毁并触发此钩子。同时,文章探讨了用户行为如何触发检查钩子,以及如何避免性能问题。最后,建议在父子组件交互中避免直接访问,推荐使用输入输出属性进行通讯。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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组件都提供了一组生命周期钩子,供你在某些特定的事件发生时执行相应的逻辑。

小年快乐。^ ^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值