在我的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将在每次更新getTodosgetLastChangedTodo时执行,并在更新时从每个值中获取最新的已知值。这里需要注意的是,每个更新的触发顺序可能并不总是相同的。因此,如果您想要更多的链式(或级联)更新,那么可以这样做:
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/

10-11 14:10