【发布时间】:2019-02-25 16:07:01
【问题描述】:
我有一个 Angular 7 模板,它显示了一个可观察的 book$,其中有一个可观察的 translationsAsArray$ 作为成员:
<div *ngIf="book$ | async as book">
<dl>
<div *ngIf="(book.translationsAsArray$ | async) as translations">
<dt><b class="text-muted">TRANSLATIONS</b></dt>
<dd>
<ul class="list-unstyled">
<li *ngFor="let translation of translations">
<a routerLink="/books/{{translation.rid}}">{{translation.title}}</a> ({{translation.languageAsString}})
</li>
</ul>
</dd>
</div>
</dl>
</div>
编辑:book.translationsAsArray$ 如下所示(仅用于测试目的):
get translationsAsArray$(): Observable<Book[]> {
return timer(50).pipe(
tap(time => console.log('translationsAsArray$() subsribed')),
map(time => [new Book(this.bookService, 'abc')]));
}
我遇到的问题是translationsAsArray$ 被反复重新订阅。
当我将解决方案更改为在组件打字稿中调用 subscribe 而不是同时为 book$ 和 translationsAsArray$ 使用 async 管道时,问题就解决了。
你知道原因吗?我的模板应该看起来不同吗?
【问题讨论】:
-
您能否发布代码以显示
translationsAsArray$和term的定义位置? -
@AlexK:我已经添加了实现。
标签: angular rxjs rxjs-pipeable-operators