2016-12-13 30 views
1

私のコンポーネントに関連するinitデータを持つストアがあります。このデータの例はapiPathの文字列です。どのようにあなたが店を埋めるために最初のアクションのためになるまで待つん2番目のアクションをディスパッチするアクションがディスパッチされた後に1つのストアが完了するまで待つ方法

this.route.params.subscribe((params: Params) => { 
    this.store.dispatch(this.searchActions.routerParamsSearchPageChanged(pageFilters)); 
}) 

:次に

ngOnInit() { 
     // this store contains data related to the component 
     this.store.dispatch(this.searchActions.addPageData(this.pageData)); 
    } 

私は、以前のストアからのデータを必要とし、ルートのparam変更があるたびにトリガーされます別のアクションを持っています第2のアクションをディスパッチする。

+0

http://stackoverflow.com/questions/35173649/angular2-how-to-chain-async-service-calls-http-requests-in-a-component – silentsod

+1

://stackoverflow.com/questions/40872357/waiting-for-ngrx-action-before-loading-page-with-url-parameter/40905330 – chrigu

+0

http://stackoverflow.com/questions/40343835/performing-advanced-http -requests-in-rxjs/40346998、http://stackoverflow.com/questions/41092488/rxjs-json-data-with-an-array-processing-each-item-further-in-the-stream/41096657、http ://stackoverflow.com/questions/39566268/angular-2-rxjs-how-return-stream-of-objects-fetched-with-several-subsequent/39578646#39578646 – martin

答えて

1

最初のアクション(addPageData)がストアに情報を入力しているとします。その後、routeパラメータを使用してデータをフィルタリングして、いくつかのタイプのクエリを推測したいのですか?おそらく、このクエリがあなたのニーズに合わない場合には、もう少し詳しいことができます。

基本的には、必要なストア情報とクエリパラメータの両方を取得します。何らかの種類の基準でそのクエリをフィルタリングすると、データが存在することを確認するのと同様に、これは単にnullをチェックするだけです。 http:私はこれが関連するかもしれないと思う

Observable.combineLatest(
     this.store.select(state => state.bookState), 
     this.route.params.select<string>('query') 
    ) 
    .filter(([bookState]) => bookState.books !== null) 
    .subscribe(([books, query]) => { 
     this.store.dispatch({ 
      type: '[Books] FILTER_BY_QUERY', 
      payload: { 
       bookType: books.type, 
       query: query 
      } 
     }); 
    }); 
関連する問題