Ich versuche, meine Tabelle bei Parent nach Update-Vorgang von Kind-Komponente zu aktualisieren.Angular 2 Observable Aktualisieren
@Service
getLicenses(){
...
return this.http.post(url","",options)
.map((result: Response) => result.json())
.map((data: License[]) => {
this.licenses = data;
return this.licenses;
})
.catch(this.handleError);
}
@ Stammkomponente
ngOnInit() {
this.licenseService.getLicenses().subscribe(licenses => {
this.licenses = licenses;
});
Alles sieht bei der Initialisierung gut. Ich habe Daten in der Tabelle. Wenn eine Zeile aus der Tabelle ausgewählt wird, übergebe ich sie an die untergeordnete Komponente und aktualisiere den Vorgang. Nach dem Update möchte ich die Tabelle aktualisieren und getLicenses() -Methode des Dienstes aufrufen. Aber es wird nicht aktualisiert. Wenn ich eine andere Testmethode anrufe, wird meine Tabelle aktualisiert.
getLicenses2(){
this.licenses.pop();
this.licenses.pop();
this.licenses[2].isFree= !this.licenses[2].isFree;
}
Auch ich habe wie unten getestet und dies nicht aktualisiert.
getLicenses2(){
this.http.post(url,"",options)
.map((result: Response) => result.json())
.map((data: License[]) => {
this.licenses = data;
this.licenses.pop();
this.licenses.pop();
})
.catch(this.handleError);
}
Warum funktioniert das, wenn ich das Array manuell ändere? Warum funktioniert nicht, wenn ich Daten von json zuordnen?
Meine Antwort ist OK es gibt keine Ausnahme und erste Initialisierung funktioniert gut.Update Operation ist auch erfolgreich, wenn ich nur Tabelle mit f5 aktualisieren neue Daten kommen. (Ich bin neu in Angular 2)
bearbeiten
Es funktioniert mit oder ohne Subjekt, wenn ich nur Array ändern, aber es funktioniert nicht, wenn ich es in http Post
Ich habe versucht, mit Gegenstand. Diesmal gibt es kein Kind. Initialisierung funktioniert nicht, wenn ich HTTP-Post aufrufen. siehe Testmethoden unten.
@Service ich habe
private licenses2 = new Subject<License[]>();
licenses2$ = this.licenses2.asObservable();
@ Stammkomponente
ngOnInit() {
this.licenseService.licenses2$.subscribe(licenses => {
this.licenses = licenses;
});
this.licenseService.getLicenses2();
}
arbeitet
getLicenses2() {
let test: License[] = [];
test.push(new License());
this.licenses2.next(test)
}
nicht funktioniert
getLicenses2(){
this.http.post(URL,"",options)
.map(response => {
this.licenses2.next(response.json() as License[])
})
.catch(this.handleError);
}
Danke.
Nun, wie ändern Sie die Daten in der untergeordneten Komponente und wie Sie sagen, die Eltern über dieser Wandel? Es wäre hilfreich, den Code zu sehen, den Sie in Ihrer untergeordneten Komponente verwenden. –
in Kind Ich rufe nur einen anderen Update-Service und neue Datenfelder buchen dann Datenbank im Backend aktualisieren. Wenn die Rückkehr erfolgreich ist, rufe ich service.getLicenses() von chield auf, so dass es neue aktualisierte Ergebnisse als json zurückgibt und mein Array aktualisiert. – noname