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