Ich bin neu in Angular 2 und ich habe ein Problem mit asynchronen http Anfrage und Bindung mit Interpolation.Angular 2 - Interpolation und Bindung mit asynchronen HTTP-Anfrage
Hier ist meine Komponente:
@Component({
selector: 'info',
template: `<h1>{{model.Name}}</h1>`
})
export class InfoComponent implements OnInit {
model: any;
constructor(
private _service: BackendService
) { }
ngOnInit() {
if (this.model == null) {
this._service.observableModel$.subscribe(m => this.model = m);
this._service.get();
}
}
}
Wenn die Vorlage gemacht wird, ich erhalte eine Fehlermeldung, weil „Modell“ ist noch nicht festgelegt.
löste ich das Problem mit diesem sehr hässliche Hack:
@Component({
selector: 'info',
template: `
<template ngFor #model="$implicit" [ngForOf]="models | async">
<h1>{{model.Name}}</h1>
</template>
`
})
export class NeadInfoComponent implements OnInit {
models: Observable<any>;
constructor(
private _service: BackendService
) { }
ngOnInit() {
if (this.models == null) {
this._service.observableModel$.subscribe(m => this.models = Observable.of([m]));
this._service.get();
}
}
}
Meine Frage ist: wie die Vorlage Rendering aufzuschieben, bis mein http Anruf beendet ist oder wie die „Modell“ Werte direkt in Vorlage einfügen, ohne Bindung zu einer anderen Komponente?
Danke!
Danke! Der Elvis hat es geschafft! Aber ich verstehe noch nicht den Renderfluss. Die Vorlage wird jedes Mal gerendert, wenn sich die Komponenteneigenschaften ändern? –
@TonyAlexanderHild, während der Erfassung der Winkeländerung (die nach jedem Ereignis ausgeführt wird), werden standardmäßig alle Ihre Ansichts-/Vorlagenbindungen fehlerhaft überprüft, dh sie werden auf Änderungen überprüft. Wenn Daten vom Server zurückgegeben werden, handelt es sich um ein Ereignis, sodass die Änderungserkennung ausgeführt wird. 'model.Name' ist dreckig markiert und hat sich geändert, also aktualisiert Angular das DOM. Nachdem Angular die Kontrolle an den Browser zurückgegeben hat, sieht es, dass sich das DOM ändert und aktualisiert, was wir auf dem Bildschirm sehen. –
Danke @MarkRajcok! Es ist jetzt klar. –