Angular 生命周期

2023-01-29  本文已影响0人  Messix_1102

ngOnInit()

在 Angular 第一次显示数据绑定和设置指令/组件的输入属性之后,初始化指令/组件。

export class NGLifeTimeTestChildComponent implements OnChanges, OnInit {
    count: number = 0;

    constructor() {
        this.count = -2;
        console.log('constructor');
    }

    ngOnInit() {
        setTimeout(() => {
            this.count = -1;
        }, 1000);
        console.log('ngOnInit');
    }

    countClick() {
        this.count += 1;
    }
}

提示: ngOnInit 是获取初始化数据最好的地方

ngOnChanges()

如果组件绑定过输入属性(@Input),那么在 ngOnInit() 之前以及所绑定的一个或多个输入属性的值发生变化时都会调用。如果组件没有任何输入属性则不会调用。当 Angular 设置或重新设置数据绑定的输入属性时会调用,该方法接受当前和上一属性值的 SimpleChanges 对象.这发生的非常频繁,所以你在这里执行的任何操作都会显著影响性能。

ngOnChanges(changes: SimpleChanges) {
  for (const propName in changes) {
      const chng = changes[propName];
      const cur  = JSON.stringify(chng.currentValue);
      const prev = JSON.stringify(chng.previousValue);
  }
}

ngDoCheck()

紧跟在每次执行变更检测时的 ngOnChanges() 和 首次执行变更检测时的 ngOnInit() 后调用。换句话说,就是任何属性发生变化都会被调用。

export class NGLifeTimeTestChildComponent implements OnChanges, OnInit {
    @Input() hero: string = '';
    @Input() power: string = '';

    changeLog: string[] = [];
    count: number = 0;

    constructor() {
        this.count = -2;
        console.log('constructor');
    }

    ngOnChanges(changes: SimpleChanges) {
    }

    ngOnInit() {
      setTimeout(() => {
        this.count = -1;
      }, 1000);
      console.log('ngOnInit');
    }

    ngDoCheck(){
      console.log('ngDoCheck');
    }

    ngAfterContentInit(){
      console.log('ngAfterContentInit');
    }

    countClick() {
        this.count += 1;
    }
}

ngAfterContentInit()

第一次 ngDoCheck() 之后调用,只调用一次。

ngAfterContentChecked()

在ngAfterContentInit() 和每次 ngDoCheck() 之后调用。

ngAfterViewInit()

第一次 ngAfterContentChecked() 之后调用,只调用一次。

ngAfterViewChecked()

ngAfterViewInit() 和每次 ngAfterContentChecked() 之后调用。

ngOnDestroy()

在 Angular 销毁指令或组件之前立即调用。
可以做以下事情

上一篇下一篇

猜你喜欢

热点阅读