如何检查 Observable 数组的长度
How to check the length of an Observable array
在我的 Angular 2 组件中,我有一个 Observable 数组
list$: Observable<any[]>;
在我的模板中有
<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>
但是 list$.length 不适用于 Observable 数组。
更新:
似乎 (list$ | async)?.length 给了我们长度,但下面的代码仍然不起作用:
<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>
任何人都可以指导我如何检查 Observable 数组的长度。
您可以使用 | async
管道:
<div *ngIf="(list$ | async)?.length==0">No records found.</div>
更新 - 2021-2-17
<ul *ngIf="(list$| async) as list; else loading">
<li *ngFor="let listItem of list">
{{ listItem.text }}
</li>
</ul>
<ng-template #loading>
<p>Shows when no data, waiting for Api</p>
<loading-component></loading-component>
</ng-template>
更新 - Angular 版本 6:
如果您正在加载一个 css 骨架,您可以使用它。如果数组没有项目,它将显示 css 模板。如果有数据则填写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>
.ts 文件的解决方案:
this.list.subscribe(result => {console.log(result.length)});
虽然这个答案是正确的
<div *ngIf="(list$ | async)?.length === 0">No records found.</div>
请记住,如果您使用 http 客户端调用后端(在大多数情况下您这样做),如果您有多个 list$,您将收到对 API 的重复调用|异步。这是因为每个 |异步管道将为您的 list$ observable 创建新订阅者。
对于 Angular 4+,试试这个
<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>
这对我有用 -
*ngIf="!photos || photos?.length===0"
我正在从 httpClient 异步获取数据。
这里的所有其他选项都不适合我,这令人失望。
特别是性感的 (list$ | async) 管道。
巴萨..
也可以缩短:
<div *ngIf="!(list$ | async)?.length">No records found.</div>
只需在括号前使用感叹号即可。
离子 4
<div *ngIf="(items | async)?.length==0">No records found.</div>
当我删除 $
标志时它起作用了
我遇到了这个问题 Observable<Customer[]>
(在构造函数中初始化)在 arr 长度为空时尝试隐藏容器 div 时说“对象可能未定义”
所以我是这样的:<div *ngIf="(similarCustomers$ | async)?.length > 0">
我的同事通过这样做解决了这个问题:
<div *ngIf="(similarCustomers$ | async) as similarCustomers">
<ng-container *ngIf="similarCustomers.length > 0">
在我的 Angular 2 组件中,我有一个 Observable 数组
list$: Observable<any[]>;
在我的模板中有
<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>
但是 list$.length 不适用于 Observable 数组。
更新:
似乎 (list$ | async)?.length 给了我们长度,但下面的代码仍然不起作用:
<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>
任何人都可以指导我如何检查 Observable 数组的长度。
您可以使用 | async
管道:
<div *ngIf="(list$ | async)?.length==0">No records found.</div>
更新 - 2021-2-17
<ul *ngIf="(list$| async) as list; else loading">
<li *ngFor="let listItem of list">
{{ listItem.text }}
</li>
</ul>
<ng-template #loading>
<p>Shows when no data, waiting for Api</p>
<loading-component></loading-component>
</ng-template>
更新 - Angular 版本 6:
如果您正在加载一个 css 骨架,您可以使用它。如果数组没有项目,它将显示 css 模板。如果有数据则填写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>
.ts 文件的解决方案:
this.list.subscribe(result => {console.log(result.length)});
虽然这个答案是正确的
<div *ngIf="(list$ | async)?.length === 0">No records found.</div>
请记住,如果您使用 http 客户端调用后端(在大多数情况下您这样做),如果您有多个 list$,您将收到对 API 的重复调用|异步。这是因为每个 |异步管道将为您的 list$ observable 创建新订阅者。
对于 Angular 4+,试试这个
<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>
这对我有用 -
*ngIf="!photos || photos?.length===0"
我正在从 httpClient 异步获取数据。
这里的所有其他选项都不适合我,这令人失望。 特别是性感的 (list$ | async) 管道。
巴萨..
也可以缩短:
<div *ngIf="!(list$ | async)?.length">No records found.</div>
只需在括号前使用感叹号即可。
离子 4
<div *ngIf="(items | async)?.length==0">No records found.</div>
当我删除 $
标志时它起作用了
我遇到了这个问题 Observable<Customer[]>
(在构造函数中初始化)在 arr 长度为空时尝试隐藏容器 div 时说“对象可能未定义”
所以我是这样的:<div *ngIf="(similarCustomers$ | async)?.length > 0">
我的同事通过这样做解决了这个问题:
<div *ngIf="(similarCustomers$ | async) as similarCustomers">
<ng-container *ngIf="similarCustomers.length > 0">