5

所以我有两个 observables,一个返回当前类别,另一个返回产品。我希望根据类别过滤产品。

这是在 Angular 2 中,所以我真的希望我的 ng2-view 成为订阅者(通过异步管道)。

像这个简单的例子:

let category$ = Observable.of({id: 1});
let products$ = Observable.from([{name: 'will be included', cat_ids: [1, 5]}, {name: 'nope', cat_ids: [2, 3]}, {name: 'also yep', cat_ids: [1, 7]}]);

return products$
  .toArray()
  .filter(prod => {
    return prod.cat_id.some(id => id === <how do I get the value of the category observable here?>)
  });

也许答案很简单,但它让我难以理解。

4

1 回答 1

9

您需要加入这两个流,例如使用combineLatest

let category$ = Observable.of({id: 1});
let products$ = Observable.from([{name: 'will be included', cat_ids: [1, 5]}, {name: 'nope', cat_ids: [2, 3]}, {name: 'also yep', cat_ids: [1, 7]}]);

return Observable.combineLatest(products$, category$)
  .map(([products, category]) => {
    return products.filter(prod => prod.cat_id.some(id => id === category.id);
  });

更新

正如@olsn 指出的那样,Observable.from您得到的是事件流而不是事件数组流。因此解决方案应该是:

let category$ = Observable.of({id: 1});
let products$ = Observable.from([{name: 'will be included', cat_ids: [1, 5]}, {name: 'nope', cat_ids: [2, 3]}, {name: 'also yep', cat_ids: [1, 7]}]);

return Observable.combineLatest(products$, category$)
  .filter(([product, category]) => {
    return product.cat_id.some(id => id === category.id);
  })
  .map(([product, category]) => product);
于 2016-12-27T10:41:29.127 回答