e (1): Aktualisierter Code zur Adressierung von Tippfehlern in der Originalfrage.
e (2): Versuch 'JSON.stringify()' die Daten in 'createContent()' in mein JSON-Objekt zu schieben. Kein Glück.
e (3): plnkr Hinzugefügt wie gewünscht: http://plnkr.co/edit/j024MYCQbypAGaf762fTAsync-Pipe kann Observable nicht rendern
ich ein Modell haben ...
class Content {
constructor(public name: string) { }
}
Ich habe einen Service ...
class ContentService {
private _contents$: Subject<Content[]>
= new Subject<Content[]>();
get contents$(): Observable<Content[]> {
return this._contents$.asObservable();
}
private _data: { contents: Content[] } = { contents: [] };
...
load(): void {
createContent(new Content("Test Content..."));
}
createContent(item: Content): void {
this._data.contents.push(item);
this._contents$.next(this._data.contents);
}
}
ich habe Komponente ...
@Component({
...
template: `
<h1 *ngFor="let item of contents$ | async">{{ item.name }}</h1>
`
})
class ContentListComponent {
contents$: Observable<Content[]>;
constructor(private _contentService: ContentService) { }
ngOnInit(): void {
this.contents$ = this._contentService.contents$;
this._contentService.load();
}
}
Einfach gesagt verstehe ich nicht, warum das Observable in meiner Komponente nicht richtig funktioniert.
Wenn ich diese ändern, so dass ich ein Array in der Komponente habe, abonnieren Sie den Service "Inhalt $", um das Array zu füllen, dann ist es kein großes Problem.
Wenn ich die Ausgabe des Dienstes und Funktionen genannt, protokolliert, ist alles auch Dandy. Das einzige Symptom, das ich erfahre, ist, dass der "* ngFor" den Stream nicht richtig zu behandeln scheint. Es ist etwas offensichtlich, oder?
Ich denke, das ist das Problem: 'this.contents $ = this._contentService.contents $;'. Bitte versuchen Sie dies in Ihrer Vorlage: '* ngFor =" let item of _contentService.contents $ | async "' – rinukkusu
Können Sie bitte versuchen, diese Zeile 'this.contents $ = this._contentService.contents $;' in den Contructor zu verschieben? Ich habe es nicht ausprobiert, aber vielleicht gefällt es der Ansicht nicht, wenn 'contents $' 'null' ist, wenn es zuerst versucht, die Bindungen aufzulösen. –
@rinukkusu: Das Backing-Objekt der Komponente hat auch eine Eigenschaft namens 'contents $'. Das war mein Fehler, diese für diese Frage ähnlich zu benennen.Ich habe es jedoch versucht, den Service direkt zu beschaffen. Nichts, leider. –