que observables example ejemplo angular observable angular2-template angular2-services

angular - observables - Cómo verificar la longitud de una matriz Observable



observables angular 5 (6)

Esto es lo que funcionó para mí:

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

Recibo mis datos de httpClient async.

Todas las otras opciones aquí no funcionaron para mí, lo cual fue decepcionante. Especialmente la tubería sexy (list $ | async).

Basa ..

En mi componente Angular 2 tengo una matriz Observable

list$: Observable<any[]>;

En mi plantilla tengo

<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>

Pero la lista $ .length no funciona en el caso de la matriz Observable.

Actualizar:

Parece que (list $ | async) ?. length nos da la longitud, pero el siguiente código aún no funciona:

<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>

¿Alguien puede guiar cómo verifico la longitud de la matriz Observable?


Para Angular 4+, prueba esto

<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>


Puedes usar el | async tubería | async :

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

Actualización - Versión angular 6:

Si está cargando un esqueleto CSS, puede usar esto. Si la matriz no tiene elementos, mostrará la plantilla css. Si hay datos, complete el ngFor .

<ul *ngIf="(list$| async)?.length > 0; else loading"> <li *ngFor="let listItem of list$| async"> {{ listItem.text }} </li> </ul> <ng-template #loading> <p>Shows when no data, waiting for Api</p> <loading-component></loading-component> </ng-template>


Si bien esta respuesta es correcta

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

Tenga en cuenta que si está utilizando el cliente http para llamar al backend (en la mayoría de los casos lo hace), recibirá llamadas duplicadas a su API si tiene más de una lista $ | asíncrono Esto es porque cada | la tubería asíncrona creará un nuevo suscriptor a su lista $ observable.


Su enfoque aquí tiene otro problema importante: al aprovechar la tubería asíncrona una y otra vez en su plantilla, en realidad está iniciando esa cantidad de suscripciones al único Observable.

KAMRUL HASAN SHAHED tiene el enfoque correcto anterior: use la tubería asincrónica una vez y luego proporcione un alias para el resultado que pueda aprovechar en los nodos secundarios.


Una solución para archivos .ts:

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