簡體   English   中英

盡管我調用了 ChangeDetectorRef.detectChanges,但未觸發 ngOnChanges

[英]ngOnChanges not triggered though I called ChangeDetectorRef.detectChanges

export class AppComponent implements OnInit, OnChanges {
  @Input()
  value: number;

  constructor(
    private cdr: ChangeDetectorRef
  ) {}

  ngOnInit() {
    of(1).subscribe(v => {
        this.value = v;

        console.log(1);

        this.cdr.detectChanges();

        of(2).subscribe(() => {
          console.log(2);
        });
      })
  }

  ngOnChanges(c: SimpleChanges) {
    console.log(3);
  }
}

我預計 console.log 的序列應該是1, 3, 2但它只打印1, 2

我知道只有input更改來自模板綁定時才會觸發ngOnChanges

所以我在console.log(1)之后調用this.cdr.detectChanges() ) 但它沒有用。

這里有什么問題?

我在這里制作了stackblitz示例 - https://stackblitz.com/edit/angular-ivy-ugdba1

額外問題

如果無法觸發組件內部的ngOnChanges ,那么this.cdr.detectChanges()會觸發哪些生命周期鈎子?

當從父組件更改輸入參數時調用ngOnChanges

如果您想在任何檢測后做某事,您應該使用ngAfterViewChecked()

this.cdr.detectChages()調用當前組件模板上的更改檢測。 這意味着如果當前組件包含<child [data]="someData"></child>那么它的[data]輸入將被檢查更改。 child.ngDoCheck()將被調用,如果someData是新值child.ngOnChanges(...)將被調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM