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)});