Dans mon composant Angular 2, j'ai un tableau observable
list$: Observable<any[]>;
Dans mon modèle j'ai
<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>
Mais la liste $ .length ne fonctionne pas avec dans le cas d'un tableau Observable.
Mettre à jour:
Il semble que (list $ | async)?. Length nous donne la longueur mais le code ci-dessous ne fonctionne toujours pas:
<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>
Quelqu'un peut-il s'il vous plaît guider comment vérifier la longueur du tableau observable.
angular
observable
angular2-template
angular2-services
Naveed Ahmed
la source
la source
Réponses:
Vous pouvez utiliser le
| async
tuyau:Mise à jour - Angular Version 6:
Si vous chargez un squelette css, vous pouvez l'utiliser. Si le tableau ne contient aucun élément, il affichera le modèle css. S'il y a des données, remplissez le
ngFor
.la source
<div *ngIf="(list$ | async)?.length==0">No records found.</div>
(ajouté?
)?
est requis car illist$
n'est défini qu'après qu'Angular2 essaie de rendre la vue la première fois.?
empêche le reste de la sous-expression d'être évalué jusqu'à ce que la partie à gauche de?
devienne!= null
(Elvis ou opérateur de navigation sûre).async
tube résout les données et donc mon prochainasync
tube en boucle n'affiche rien. Ou peut-être*ngIf
crée une portée supplémentaire et donc cela ne fonctionne pas. Dur à dire. Mais alors que ma boucle est enveloppée à l'intérieur de if, elle n'affiche aucune donnée. Si lui-même évaluetrue
correctement.Une solution pour .ts-Files:
la source
onDestroy
composantPour Angular 4+, essayez ceci
la source
Bien que cette réponse soit correcte
Gardez à l'esprit que si vous utilisez le client http pour appeler le backend (dans la plupart des cas, vous le faites), vous obtiendrez des appels en double vers votre API si vous avez plus d'une liste $ | asynchrone . C'est parce que chaque | async pipe créera un nouvel abonné à votre liste $ observable.
la source
C'est ce qui a fonctionné pour moi -
Je récupère mes données depuis httpClient async.
Toutes les autres options ici ne fonctionnaient pas pour moi, ce qui était décevant. Surtout le tube sexy (list $ | async).
Basa ..
la source
Votre approche ici présente un autre problème majeur: en exploitant le canal asynchrone à plusieurs reprises dans votre modèle, vous lancez en fait autant d'abonnements à l'unique Observable.
KAMRUL HASAN SHAHED a la bonne approche ci-dessus: utilisez le tube asynchrone une fois, puis fournissez un alias pour le résultat que vous pouvez exploiter dans les nœuds enfants.
la source
Peut également être raccourci:
Utilisez simplement le point d'exclamation avant la parenthèse.
la source
ionique 4
cela a fonctionné quand j'ai enlevé le
$
signela source