ngOnChanges wird nicht ausgelöst, wenn das Attribut durch Observable / subscrption geändert wird


Michael

Ich versuche etwas zu tun, nachdem ein Observable/ subscribeabgeschlossen ist. Ich ändere eine InputEigenschaft in der subscribe( onNext )Methode, ngOnChangesfeuere aber nie.

Was soll ich anders machen?

import { Component, EventEmitter, 
  OnInit, AfterViewInit, OnChanges, SimpleChanges,
  Input, Output
} from '@angular/core';

@Component({
  templateUrl: 'myTemplate.html'
    , providers: [ NamesService ]
})

export class MyPage  {
  @Input() names: any[];

  constructor( public namesSvc: NamesService) {}

  ngOnInit() {
    this.getNames$()
  }


  getNames$() : void {
    this.nameService.get().subscribe( 
      (result)=>{
       this.names = result;
       console.log(`getNames$, names=${this.names}`);

       // I could doSomething() here, but it doesn't seem like the correct place
       // doSomething()  

      }
      , error =>  this.errorMessage = <any>error
    )
  }

  ngOnChanges(changes: SimpleChanges) : void {
    // changes.prop contains the old and the new value...
    console.warn(`>>> ngOnChanges triggered`)
    if (changes["names"]) {
      console.warn(`>>> ngOnChanges, names=${changes["names"]}`)
      this.doSomething()
    }
  }

  doSomething(){
    console.log("doing something");
  }
}
Günter Zöchbauer

Das ist "wie geplant"

ngOnChanges()wird nur aufgerufen, wenn die Änderungserkennung eine Bindung an ein aktualisiert @Input(). Wenn die Eingabe zwingend von irgendwoher geändert wird, wird sie nicht aufgerufen.

namesErstellen Sie einfach einen Getter / Setter, damit der Code jedes Mal ausgeführt wird, wenn die Eigenschaft aktualisiert wird.

Verwandte Artikel