如何使用另一个Observable中的项目

时间:2016-12-14 18:44:14

标签: angular rxjs

如何用路由器参数的结果替换123(我使用的是Angular 2)?

this.data = this.apollo.watchQuery({
  query: query,
  variables: {
    custNum: 123
  }
})
  .map(({data}) => data.allCustomers.nodes);

通常,我会像这样访问params ......

this.route.params
  .switchMap((params: Params) => this.customerService.getCustomer(+params['id']))
  .subscribe((results: any) => this.data = results);

但我不再拥有customerService,而是希望使用apollo查询。但不太确定如何把它们放在一起?

1 个答案:

答案 0 :(得分:0)

您的watchQuery不会被动,因为您可以动态替换传递给它的variables。每当您的custNum更改并放弃之前的Observable时,您需要设置一个新的watchQuery。你可以通过.switch()执行此操作,当流发出新的Observable时,它会取消前一个Observable的订阅。

Rx.Observable.interval(500)
  .map(customerNumber => this.apollo.watchQuery({
    query: query,
    variables: {
      custNum: customerNumber
    }
  }) /* returns ObservableQuery */
  .switch() /* unsubscribes previous watchQuery, subscribes new one */
  .map(({data}) => data.allCustomers.nodes);