嗨,我有一个具有很多属性(名称、标题、地址…)的可观察用户$
component{
user$:Observerable<User>;
constructor(private userService:UserService){
this.user$ = this.userService.someMethodReturningObservable$()
}
}
有没有办法使用html模板中的async管道订阅它并将其绑定到一个局部变量上,就像这样
<div #user="user$ | async">
<h3> {{user.name}}
</div>
我知道can可以在构造函数中订阅它,然后在OnEx/OnDestroy中取消订阅,但我只是好奇我是否可以使用异步管道。
干杯
#
是模板引用变量。它服从于DOM元素,不能这样使用。
到目前为止,Angular中还没有实现局部变量,可以监控这个封闭的问题是否引用了相关问题。
从Angular 4开始,ngIF
和ngFor
指令的语法被更新为允许局部变量。有关详细信息,请参阅ngIF
参考。所以可以这样做
<div *ngIf="user$ | async; let user">
<h3> {{user.name}} </h3>
</div>
这将创建div
包装元素并为其提供伪装行为,因此不需要?.
'埃尔维斯'运算符。
如果不需要额外的标记,可以将其更改为
<ng-container *ngIf="user$ | async; let user">...</ng-container>
如果不需要隐藏行为,则可以将表达式更改为真实占位符值。
占位符可以是对象值的空对象,
<div *ngIf="(user$ | async) || {}; let user">
<h3> {{user?.name}} </h3>
</div>
或者原始价值的空间,
<div *ngIf="(primitive$ | async) || ' '; let primitive">
<h3> {{primitive}} </h3>
</div>
@Bjorn Schijff和@estus
而不是:
<div *ngIf="(user$ | async) || {}; let user">
做:
<div *ngIf="(user | async) as user">
使用以下语法:
<div *ngIf="(user | async) as user">
注意:在表达式末尾添加“作为用户”。
这将做的是等待用户$|async评估,并将结果绑定到user的值(非美元后缀)。