【发布时间】:2017-11-07 15:36:56
【问题描述】:
有没有更好的方法来写这个。我想加载一些数据,订阅在下拉列表中加载的行为主题,每次更改我想过滤数据。它可以工作,但不确定这是通过嵌套 BehaviorSubject 编写它的最佳方式,还是我应该订阅从 http 加载数据的 forkJoin 的完成事件
ngOnInit() {
//load all the data
let array1: Observable<any[]> = this.service1.getAll();
let array2: Observable<any[]> = this.service2.getAll();
let observableBatch = [array1, array2];
Observable.forkJoin(observableBatch).subscribe(data => {
this.items1 = data[0] as Array<any>;
this.items2 = data[1] as Array<any>
//subscribe to BehaviorSubject Observable, filter on every change
this.someService.selectedItem$.subscribe((item: any) => {
if (item) {
this.filterItemsByItemId(item.itemId);
}
}, (error:any)=>{
//error
});
}, (error: any) => {
//error
});
}
【问题讨论】:
-
为什么要在订阅中订阅?这很奇怪
-
这就是我问这个问题的原因?我需要加载一堆数组,并在加载后通过订阅加载应用程序加载的行为主题来过滤它们。你能告诉我一个更好的方法而不是问我这个问题吗
-
为什么要使用嵌套订阅?因为我没有看到你在第二次订阅中使用
item1或items2 -
items1 和 items2 根据最初发出值但我的更改的行为主题值进行过滤,因此我需要在过滤它们之前加载数组。 this.filterItemsByItemId(item.itemId);在那个方法里面是 this.items1.filter
-
我只是想知道也许我应该移动到完成的事件来订阅而不是嵌套,顺便说一句,这并不奇怪,这不是一个简单的英雄应用程序,这个应用程序有数百万行代码和复杂的组件...大声笑