2016-12-14 12 views
0

123をルータのパラメータ(Angular 2を使用しています)の結果と置き換えるにはどうすればよいですか?Observableのアイテムを他のObservableで使用する方法

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を持っており、代わりにアポロのクエリを使用します。しかし、これらをまとめる方法はあまりよく分かりません。

+0

ウォッチクエリを追加するには、route.paramsのサブスクリプションを使用しますか? –

答えて

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); 
関連する問題