在我的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)
})
当我订阅它时,每次todo更改时,我都会得到一个console.log(lasttodo)。我想用flatmap和ngrx.select,我每次都订阅一个新的可观测数据?
我可以和哪个接线员连锁两个商店的切片?
编辑:
只要视图在dom中,我就希望继续订阅todolistgroup$,因为它应该继续更新我的视图。
到目前为止,我的解决方案是在reducer中定义一个新的切片,它返回两个所需的属性。但是,我仍然对哪一个操作符可以有效地链接ngrx单属性片感兴趣。
谢谢!
最佳答案
像这样的工作:
this.todoListGroup$ =
Observable.combineLatest(
this.ngrx.select(fromRoot.getTodos),
this.ngrx.select(fromRoot.getLastChangedTodo)
)
.do(([todos, lastToDo]) => console.log(todos, lastToDo));
do
将在每次更新getTodos
或getLastChangedTodo
时执行,并在更新时从每个值中获取最新的已知值。这里需要注意的是,每个更新的触发顺序可能并不总是相同的。因此,如果您想要更多的链式(或级联)更新,那么可以这样做:this.todoListGroup$ =
this.ngrx.select(fromRoot.getTodos)
.withLatestFrom(this.ngrx.select(fromRoot.getLastChangedTodo))
.do(([todos, lastToDo]) => console.log(todos, lastToDo));
它将在每次更新
getToDos
时执行,并从getLastChangedTodo
获取最新值。因此,链式(或级联式)更新的习惯用法。关于angular - ngrx-链接两个store.select切片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47268772/