我有一个服务,它返回一个 Observable。现在我正在寻找正确/最有效的方法来从此 Observable 获得多个结果,而无需编写太多代码。
MyService
返回一个Observable<Array<Foo>>
MyComponent
调用myService.getFoos()
并应输出数组的前 5 个元素、数组的总长度以及未显示的元素数。
这是我当前的代码:
@Injectable()
export class MyService {
foos = new BehaviorSubject<Array<Foo>>([]);
getFoos() {
return this.foos.asObservable();
}
}
@Component({
template: `
Total: {{ totalCount | async }}
Omitted: {{ (totalCount | async) - (maxFiveItems | async).length }}
<div *ngFor="let item of maxFiveItems | async">
{{item.bar}}
</div>
`
})
export class MyComponent {
totalCount: Observable<number>;
maxFiveItems: Observable<Array<Foo>>;
constructor(myService:MyService) {
this.totalCount = myService.getFoos()
.map(arr => arr.length);
this.maxFiveItems = myService.getFoos()
.map(arr => arr.slice(0, 5));
}
}
结果看起来不错,但我使用了async
4 次管道。其中(据我所知)将导致 4 个订阅。我猜这根本没有必要(?)
当然,我可以在constructor
of 中手动订阅MyComponent
,然后在没有async
管道的情况下生活。但后来我必须照顾自己退订。
有没有其他方法来处理这个?