【发布时间】:2017-11-13 16:13:33
【问题描述】:
在我的 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,我每次都订阅一个新的 Observable?
我可以使用哪个运算符链接两个存储切片?
编辑:
只要视图在 DOM 中,我就想继续订阅 todoListGroup$,因为它应该不断更新我的视图。
到目前为止,我的解决方案是在 reducer 中定义一个新切片,它返回两个所需的属性。但是,我仍然对哪个运算符可以有效地链接 ngrx 单个属性切片感兴趣。
谢谢!
【问题讨论】:
-
你能澄清你的目标吗?如果您不想要多个内部订阅,我认为您想要
switchMap或withLatestFrom如果您想要来自商店的两个值,但第一个应该是唯一的触发器。 -
我发布的 2 个解决方案没有实现这一点是否有原因?
-
抱歉,还没有尝试过 :) 到目前为止,我一直在自己工作。但是 withLatestFrom 似乎很有希望!谢谢
-
您可能有兴趣使用
reselect库或仅使用原始rxjs 创建投影,而不是“在reducer 中定义一个返回两个所需属性的新切片”。这是使用 ngrx 创建投影的教程:gist.github.com/btroncone/…