Han*_*Che 32 pipe local-variables typescript angular2-observables angular
嗨,我有一个可观察的用户$,有很多属性(名称,标题,地址......)
component{
user$:Observerable<User>;
constructor(private userService:UserService){
this.user$ = this.userService.someMethodReturningObservable$()
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在html模板中使用异步管道来订阅它并将其绑定到这样的局部变量
<div #user="user$ | async">
<h3> {{user.name}}
</div>
Run Code Online (Sandbox Code Playgroud)
我知道可以在构造函数中订阅它然后在OnLeave/OnDestroy中取消订阅但我只是好奇我是否可以使用异步管道.
干杯
Est*_*ask 84
#
是模板引用变量.它遵循DOM元素,不能像那样使用.
到目前为止,Angular中没有实现局部变量,可以监视此已关闭的问题以获取对相关问题的引用.
从Angular 4开始,语法ngIf
和ngFor
指令被更新为允许局部变量.有关详情,请参阅ngIf
参考 所以有可能做到
<div *ngIf="user$ | async; let user">
<h3> {{user.name}}
</div>
Run Code Online (Sandbox Code Playgroud)
这将创建div
包装元素并为其提供隐藏行为,因此不需要?.
'Elvis'操作符.
如果不需要额外的标记,可以将其更改为
<ng-container *ngIf="user$ | async; let user">...</ng-container>
Run Code Online (Sandbox Code Playgroud)
如果不希望隐藏行为,则可以将表达式更改为truthy占位符值.
占位符可以是对象值的空对象,
<div *ngIf="(user$ | async) || {}; let user">
<h3> {{user?.name}}
</div>
Run Code Online (Sandbox Code Playgroud)
或原始价值的空间,
<div *ngIf="(primitive$ | async) || ' '; let primitive">
<h3> {{primitive}}
</div>
Run Code Online (Sandbox Code Playgroud)
小智 25
@Bjorn Schijff和@estus
代替:
<div *ngIf="(user$ | async) || {}; let user">
Run Code Online (Sandbox Code Playgroud)
做:
<div *ngIf="(user | async) as user">
Run Code Online (Sandbox Code Playgroud)
使用以下语法:
<div *ngIf="(user | async) as user">
Run Code Online (Sandbox Code Playgroud)
注意:在表达式末尾添加“ as user ”。
这将做的是等到 user$ | async 已评估,并将结果绑定到 user 的值(非美元后缀)。
归档时间: |
|
查看次数: |
24045 次 |
最近记录: |