Angular: 嵌套的异步管道使用安全吗?
Angular: are nested async pipe usage safe?
我找不到与此相关的任何文档,所以就在这里。我在模板中使用了异步管道:
<component [aliases]="(users$ | async).profile.aliases$ | async"/>
aliases$
订阅是否在 users$
发出时正确取消订阅?如果包装元素上有一个 *ngIf
怎么办?
为避免使用多个 async
管道,请在 class
中尝试此操作
aliases$ = this.users$.pipe(
switchMap(users => users.profile.aliases$),
)
<component [aliases]="aliases$ | async"/>
关于您关于安全的问题。对内部可观察对象的订阅将有效。检查这个 stackblitz https://stackblitz.com/edit/angular-f88kfn.
如果我们深入研究 AsyncPipe
的来源,我们会发现管道在 ngOnDestroy
钩子中取消订阅。但如果 "outer" observable 在 "stream" 中只有新值,则不会调用它。所以只需使用 switchMap
和一个 async
管道。
希望对您有所帮助。
我找不到与此相关的任何文档,所以就在这里。我在模板中使用了异步管道:
<component [aliases]="(users$ | async).profile.aliases$ | async"/>
aliases$
订阅是否在 users$
发出时正确取消订阅?如果包装元素上有一个 *ngIf
怎么办?
为避免使用多个 async
管道,请在 class
aliases$ = this.users$.pipe(
switchMap(users => users.profile.aliases$),
)
<component [aliases]="aliases$ | async"/>
关于您关于安全的问题。对内部可观察对象的订阅将有效。检查这个 stackblitz https://stackblitz.com/edit/angular-f88kfn.
如果我们深入研究 AsyncPipe
的来源,我们会发现管道在 ngOnDestroy
钩子中取消订阅。但如果 "outer" observable 在 "stream" 中只有新值,则不会调用它。所以只需使用 switchMap
和一个 async
管道。
希望对您有所帮助。