【发布时间】:2020-04-29 11:17:21
【问题描述】:
我找不到任何与此相关的文档,所以在这里。我在模板中使用了异步管道:
<component [aliases]="(users$ | async).profile.aliases$ | async"/>
users$ 发出时,aliases$ 订阅是否正确取消订阅?如果包装元素上有*ngIf 怎么办?
【问题讨论】:
标签: angular rxjs rxjs6 rxjs-observables
我找不到任何与此相关的文档,所以在这里。我在模板中使用了异步管道:
<component [aliases]="(users$ | async).profile.aliases$ | async"/>
users$ 发出时,aliases$ 订阅是否正确取消订阅?如果包装元素上有*ngIf 怎么办?
【问题讨论】:
标签: angular rxjs rxjs6 rxjs-observables
为避免使用多个 async 管道,请在类中尝试此操作
aliases$ = this.users$.pipe(
switchMap(users => users.profile.aliases$),
)
<component [aliases]="aliases$ | async"/>
关于您的安全问题。订阅内部 observable 将是有效的。检查此堆栈闪电战https://stackblitz.com/edit/angular-f88kfn。
如果我们深入了解AsyncPipe 的来源,我们会发现管道在ngOnDestroy 挂钩中取消订阅。但如果“外部”可观察对象在“流”中有新值,则不会调用它。所以只需使用switchMap 和一个async 管道。
希望对你有帮助。
【讨论】: