angular - 角?在 ngIf 之后
问题描述
我正在尝试执行以下操作:
<div *ngIf="(observable$ | async) as results?.length > 0"> <-- here is the error
<span *ngFor="let result of results>{{result}}</span>"
<div>
即只有在结果可用并且有超过 1 个结果时才绘制这个
第一行<div>
导致错误。存在两个<div>
s 解决方案:
<div *ngIf="(observable$ | async) as results">
<div *ngIf="results?.length > 0">
<span *ngFor="let result of results>{{result}}</span>"
可以在<div>
不添加另一个容器的情况下一次性完成吗?
解决方案
?
不能与as
in*ngIf
语句一起使用。你能做的最好的就是(observable$ | async)?.length > 0
。
此外,当您不需要div
在 HTML 中呈现的两个嵌套 s (或任何与此相关的,但您仍然需要*ngIf / *ngFor
)时,您可以使用<ng-container>
不会呈现为 HTML 元素的 an:
<ng-container *ngIf="(observable$ | async) as results">
<div *ngIf="results?.length > 0">
<span *ngFor="let result of results>{{result}}</span>
如果您在迭代之前尝试检查一个元素是否不为空,那么您实际上不需要显式检查它,因为*ngFor
它将优雅地处理空数组/列表。因此,您应该能够将模板简化为:
<ng-container *ngIf="(observable$ | async) as results">
<span *ngFor="let result of results>{{result}}</span>
甚至更进一步:
<div *ngFor="let item of observable$ | async">{{result}}</div>
推荐阅读
- ruby-on-rails - 在测试模式下没有来自 ActiveRecord 的 SQL 日志和 byebug
- python - 双斜杠字符串在函数内部变成单斜杠
- c++ - 如何在没有 c++ 对象的情况下调用函数?
- android - 无法在 findViewById 中解析 Inflater 中的符号
- jenkins-pipeline - hashcorp Vault 与 Jenkins 管道的集成
- c# - 如何使用 ClientCredentials grantType 向 IdentityServer4 生成的我的访问令牌添加声明
- python - 下面的代码将删除以 date1 开头的文件夹。但我想删除除 date1 之外的所有文件夹。所以请帮助。Thx
- javascript - 使用 firebase.auth().sendPasswordResetEmail() 检查电子邮件是否发送成功
- ios - SauceLabs 混合应用程序测试自动化会话未在 iOS 设备上启动
- doxygen - 如果使用 \code,Doxygen 不会记录一个类