157 votes

Comment vérifier la longueur d'un tableau Observable

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 list$.length ne fonctionne pas dans le cas d'un tableau Observable.

Mise à 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 m'indiquer comment vérifier la longueur d'un tableau Observable.

0 votes

3 votes

Votre approche présente un autre problème majeur : en utilisant le tube asynchrone à plusieurs reprises dans votre modèle, vous lancez en fait un grand nombre d'abonnements à l'Observable unique. KAMRUL HASAN SHAHED a adopté 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.

277voto

Günter Zöchbauer Points 21340

Vous pouvez utiliser le | async tuyau :

<div *ngIf="(list$ | async)?.length==0">No records found.</div>

7 votes

J'ai essayé cela aussi mais cela donne l'erreur "TypeError : Impossible de lire la propriété 'length' de null".

4 votes

Difficile de savoir d'après les informations que vous avez fournies. Essayez <div *ngIf="(list$ | async)?.length==0">No records found.</div> (ajouté ? )

7 votes

J'ai essayé ceci et cela fonctionne <div *ngIf="(list$ | async) ?.length==0">Aucun enregistrement n'a été trouvé.</div>

42voto

Blankarsch Points 401

Une solution pour les fichiers .ts :

     this.list.subscribe(result => {console.log(result.length)});

0 votes

N'est-il pas nécessaire de se désinscrire immédiatement après ?

0 votes

Il est préférable de se désabonner des observables sur onDestroy composant

0 votes

@ThPadelis Cela dépend de la durée de vie de l'observable...

25voto

Pour Angular 4+, essayez ceci

<div *ngIf="list$ | async;let list">
    Length: {{list.length}}
    <div *ngIf="list.length>0">
        <ul>
            <li *ngFor="let item of list">
                {{item.firstName}}
            </li>
        </ul>
    </div>
</div>

12voto

Anjmao Points 101

Bien que cette réponse soit correcte

<div *ngIf="(list$ | async)?.length === 0">No records found.</div>

Gardez à l'esprit que si vous utilisez un client http pour appeler le backend (ce qui est le cas dans la plupart des cas), vous obtiendrez des appels en double vers votre API si vous en avez plusieurs. list$ | async . En effet, chaque tuyau asynchrone crée un nouvel abonné à votre observable list$.

3voto

Gregory Points 696

C'est ce qui a marché pour moi -

*ngIf="!photos || photos?.length===0"

Je reçois mes données de httpClient async.

Toutes les autres options ici n'ont pas fonctionné pour moi, ce qui est décevant. Surtout le tube sexy (list$ | async).

Basa

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X