/ / ngrx - верига от два store.select резета - ъглова, rxjs, ngrx

ngrx - верига от два store.select - ъглова, rxjs, ngrx

В моя Todo 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)
})

Когато се абонирам за него, получавам още един console.log (lastTodo) всеки път, когато да се промени. Смятам, че с flatmap и ngrx.select се абонирам за нов Obsable всеки път?

с кой оператор мога да верига две резени?

РЕДАКТИРАНЕ:

Докато изгледът е в DOM, искам да остана абонат на todoListGroup $, тъй като той трябва да актуализира моя изглед.

Моето решение досега е да се определи нов отрязък в редуктора, който връща двете желани свойства. Въпреки това, все още се интересувам кой оператор може ефективно да верига ngrx единични резени на собственост.

Благодаря!

Отговори:

4 за отговор № 1

Би ли нещо подобно на тази работа:

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));

това ще се изпълнява всеки път, когато getToDos се актуализира с последната стойност от lastchangedtodo


0 за отговор № 2

Опитайте тази:

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)
})