2017-11-13 8 views
0

私は私が1以上にconsole.log(lastTodo)たびTODOの変更を取得し、このコードngrx - 私はそれを購読するとチェーン2 store.selectスライスは私の藤堂CMPでは

this.todoListGroup$ = this.ngrx.select(fromRoot.getTodos) 
    .flatMap((todos: Todo[]) => { 
     console.log(todos) 
     this.todos = todos 
     this.ngrx.select(fromRoot.getLastChangedTodo); 
    }) 
    .map(lastTodo =>{{ 
     console.log(lastTodo) 
     doSomething(this.todos, lastTodo) 
    }) 

を持っています。私はflatmapとngrx.selectで毎回新しいObservableを購読していると思いますか?

オペレータは2つの店舗スライスをチェーン化できますか?

EDIT:

限りビューがDOMであるように、私はそれが私の見解を更新し続ける必要があるためtodoListGroup $に加入して滞在したいです。

これまでのところ私の解決策は、2つの望ましい特性を返す減速器に新しいスライスを定義することでした。しかし、私はまだ演算子が単一のプロパティスライスを効果的に連鎖させることに興味があります。

ありがとうございます!この作品のような

+0

あなたの目標を明確にすることはできますか?複数の内部サブスクリプションを必要としない場合は 'switchMap'を、ストアの両方の値を必要とする場合は' withLatestFrom'を、最初のものは唯一のトリガーにする必要があると考えています。 – bygrace

+0

私が投稿した2つのソリューションがこれを達成しない理由はありますか? – bryan60

+0

申し訳ありませんが、まだそれらを試していない:)私は自分自身でこれまで作業していた。しかし、withLatestFromは有望なようだ!ありがとう –

答えて

4

何か:

this.todoListGroup$ = Observable.combineLatest(this.ngrx.select(fromRoot.getTodos), 
           this.ngrx.select(fromRoot.getLastChangedTodo)) 
          .do(([todos, lastToDo]) => console.log(todos, lastToDo)); 

これは、これはあなたが望むものではない場合、あなたはもっとこのようにそれを行うことができ、その都度それらのいずれかの更新プログラムのいずれかを実行します:

this.todoListGroup$ = this.ngrx.select(fromRoot.getTodos).withLatestFrom(this.ngrx.select(fromRoot.getLastChangedTodo)) 
    .do(([todos, lastToDo]) => console.log(todos, lastToDo)); 

これはlastchangedtodo

+0

combineLatestは、Observableを組み合わせたもののいずれかを毎回放出する新しいObservableを作成しますか? –

+0

はい、両方のどちらかから最新の値が得られます。いずれかが – bryan60

0

から最新の値を持つたびにgetToDosの更新を実行します、これを試してみてください:

this.todoListGroup$ = this.ngrx.select(fromRoot.getTodos) 
.flatMap((todos: Todo[]) => { 
    console.log(todos) 
    this.todos = todos 
    this.ngrx.select(fromRoot.getLastChangedTodo); 
}) 
.take(1) 
.map(lastTodo =>{{ 
    console.log(lastTodo) 
    doSomething(this.todos, lastTodo) 
}) 
+0

であるため、基本的には毎回新しいスライスを購読していますが、1つ後に完了しますか? 完了したくない場合はどうすればいいですか? –

関連する問題