在我的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)
})
Run Code Online (Sandbox Code Playgroud)
当我订阅它时,每次todo更改时我都会再获得一个console.log(lastTodo).我认为使用flatmap和ngrx.select,我每次订阅一个新的Observable?
哪个运营商可以链接两个商店切片?
编辑:
只要视图在DOM中,我想继续订阅todoListGroup $,因为它应该不断更新我的视图.
到目前为止,我的解决方案是在reducer中定义一个新切片,它返回两个所需的属性.但是,我仍然对哪个运算符可以有效链接ngrx单个属性切片感兴趣.
谢谢!
Seb*_*dez 18
这是RxJ版本6.0的方法.
首先导入运算符和Observable函数,如下所示:
import { Observable, combineLatest } from 'rxjs';
import { tap } from 'rxjs/operators';
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它们:
combineLatest(
this.store.pipe(select('users', 'userList')),
this.store.pipe(select('users', 'accountsList')),
).pipe(tap(([userList, accountsList]) => console.log(userList, accountsList)))
Run Code Online (Sandbox Code Playgroud)
bry*_*n60 11
会这样的工作:
this.todoListGroup$ =
Observable.combineLatest(
this.ngrx.select(fromRoot.getTodos),
this.ngrx.select(fromRoot.getLastChangedTodo)
)
.do(([todos, lastToDo]) => console.log(todos, lastToDo));
Run Code Online (Sandbox Code Playgroud)
该do会执行每一次一方的getTodos或getLastChangedTodo更新,并会采取从他们每个人的最新已知值在更新的时间.这里需要注意的是,每次更新时的顺序可能并不总是相同.因此,如果您想要更多链接(或级联)更新,那么您可以这样做:
this.todoListGroup$ =
this.ngrx.select(fromRoot.getTodos)
.withLatestFrom(this.ngrx.select(fromRoot.getLastChangedTodo))
.do(([todos, lastToDo]) => console.log(todos, lastToDo));
Run Code Online (Sandbox Code Playgroud)
这将在每次getToDos更新时执行,并将从中获取最新值getLastChangedTodo.因此链接(或级联)更新的习语.
| 归档时间: |
|
| 查看次数: |
8182 次 |
| 最近记录: |