Angular Can';使用路由器状态在角度上进行t组合测试
我正在尝试使用Ngrx中的CombineTest在导航端执行操作,或者在另一个订阅中执行状态更改。在我的组件的Angular Can';使用路由器状态在角度上进行t组合测试,angular,ngrx,Angular,Ngrx,我正在尝试使用Ngrx中的CombineTest在导航端执行操作,或者在另一个订阅中执行状态更改。在我的组件的ngOnInit()中,我有: ngOnInit(): void { const routerSub = this.router.events.subscribe(); const patientSub = this.patientService.state.subscribe(); Observable.combineLatest(routerSub, pat
ngOnInit()
中,我有:
ngOnInit(): void {
const routerSub = this.router.events.subscribe();
const patientSub = this.patientService.state.subscribe();
Observable.combineLatest(routerSub, patientSub, (routerEvent, patientState) => {
console.log(routerEvent);
console.log(patientState);
});
}
但是,我在routerSub
上有一个编译器错误:
类型为“Subscription”的参数不能分配给类型为的参数
“IScheduler | Subscribable | PromiseLike | ArrayLike”|
((…值:any[])=>{})
对于路由器状态,我应该为combinelatetest
提供什么?组合可观察对象
,并在所有可观察对象都有最新值要发出时发出最新值。因此,您需要传入可观察对象,而不是订阅。所以你的代码应该改成
ngOnInit(): void {
const routerSub = this.router.events;
const patientSub = this.patientService.state;
Observable.combineLatest(routerSub, patientSub, (routerEvent, patientState) => {
console.log(routerEvent);
console.log(patientState);
})
.subscribe();
}
啊-我还错过了最后的
.subscribe()
。但是,如果我遵循以下示例:但是,我从未看到任何值发出。我知道状态已填充,因为还有其他组件利用正常工作的patientState
。只有在导航之后,我才能看到发出的值。无论是否导航,我都希望看到最新的patientState
。@Brandon CombineTest在您首次订阅时不会触发初始发射。因此,在一个可观察到的发射之前,你不会得到最新的值。还有其他接线员吗?还是更好的方法?@Brandon抱歉我弄错了。如果两个观测值都有一个最新的值要发射,则CombineTest将在subscribe时发射。所以听起来好像是你的状态有一个最新的值,但是router.events没有。这就是为什么当你导航时,现在两个观测值都有一个最新的值和最组合的发射。因此,您正在寻找在订阅时发出的东西,如果任何一个可观测对象具有最新的值,然后在任何一个可观测对象发出时发出?我实际上使用了race
。我将您的答案标记为已接受,因为它确实解决了我的编译问题:)请看