ngOnChanges wird nicht ausgelöst, wenn das Attribut durch Observable / subscrption geändert wird
Michael
Ich versuche etwas zu tun, nachdem ein Observable
/ subscribe
abgeschlossen ist. Ich ändere eine Input
Eigenschaft in der subscribe( onNext )
Methode, ngOnChanges
feuere 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.
names
Erstellen Sie einfach einen Getter / Setter, damit der Code jedes Mal ausgeführt wird, wenn die Eigenschaft aktualisiert wird.