In meiner Angular 2-Komponente habe ich ein Observable-Array
list$: Observable<any[]>;
In meiner Vorlage habe ich
<div *ngIf="list$.length==0">No records found.</div>
<div *ngIf="list$.length>0">
<ul>
<li *ngFor="let item of list$ | async">item.name</li>
</ul>
</div>
Die Liste $ .length funktioniert jedoch bei einem Observable-Array nicht.
Aktualisieren:
Es scheint, dass (Liste $ | async)?. Länge gibt uns die Länge, aber der folgende Code funktioniert immer noch nicht:
<div>
Length: {{(list$ | async)?.length}}
<div *ngIf="(list$ | async)?.length>0">
<ul>
<li *ngFor="let item of (list$ | async)">
{{item.firstName}}
</li>
</ul>
</div>
</div>
Kann mir jemand bitte zeigen, wie ich die Länge des Observable-Arrays überprüfe?
angular
observable
angular2-template
angular2-services
Naveed Ahmed
quelle
quelle
Antworten:
Sie können das
| async
Rohr verwenden:Update - Angular Version 6:
Wenn Sie ein CSS-Skelett laden, können Sie dies verwenden. Wenn das Array keine Elemente enthält, wird die CSS-Vorlage angezeigt. Wenn Daten vorhanden sind, füllen Sie die aus
ngFor
.quelle
<div *ngIf="(list$ | async)?.length==0">No records found.</div>
(hinzugefügt?
)?
ist erforderlich, dalist$
es erst festgelegt wird, nachdem Angular2 versucht, die Ansicht zum ersten Mal zu rendern.?
verhindert , dass der Rest des Unter Ausdruck ausgewertet werden , bis der Teil links?
wird!= null
(Elvis oder safe-Navigationsführung).async
Pipe Daten auflöst und daher meine nächsteasync
Pipe-on-Schleife nichts anzeigt. Oder*ngIf
schafft vielleicht einen zusätzlichen Bereich und deshalb funktioniert es nicht. Schwer zu erzählen. Aber während meine Schleife in if eingeschlossen ist, werden keine Daten angezeigt. Wenn selbsttrue
richtig auswertet .Eine Lösung für .ts-Files:
quelle
onDestroy
KomponenteVersuchen Sie dies für Angular 4+
quelle
Während diese Antwort richtig ist
Beachten Sie, dass Sie, wenn Sie den http-Client zum Aufrufen des Backends verwenden (in den meisten Fällen), doppelte Aufrufe an Ihre API erhalten, wenn Sie mehr als eine Liste $ | haben asynchron . Dies liegt daran, dass jeder | Async Pipe erstellt einen neuen Abonnenten für Ihre Liste $ beobachtbar.
quelle
Das hat bei mir funktioniert -
Ich erhalte meine Daten von httpClient async.
Alle anderen Optionen hier haben bei mir nicht funktioniert, was enttäuschend war. Besonders die sexy (Liste $ | async) Pfeife.
Basa ..
quelle
Ihr Ansatz hier hat ein weiteres großes Problem: Indem Sie die asynchrone Pipe in Ihrer Vorlage immer wieder nutzen, starten Sie tatsächlich so viele Abonnements für das einzelne Observable.
KAMRUL HASAN SHAHED hat oben den richtigen Ansatz: Verwenden Sie die asynchrone Pipe einmal und geben Sie dann einen Alias für das Ergebnis an, das Sie in untergeordneten Knoten nutzen können.
quelle
Kann auch gekürzt werden:
Verwenden Sie einfach das Ausrufezeichen vor der Klammer.
quelle
ionisch 4
Es hat funktioniert, als ich das
$
Schild entfernt habequelle