Angular 角度:如何使用路由器事件订阅可观察内部服务的多个部分
在我的导航服务中,我想在一个订阅中订阅当前选定的路由url和数据 要订阅路由url,我将写:Angular 角度:如何使用路由器事件订阅可观察内部服务的多个部分,angular,observable,Angular,Observable,在我的导航服务中,我想在一个订阅中订阅当前选定的路由url和数据 要订阅路由url,我将写: constructor( router: Router, activatedRoute: ActivatedRoute ) { router.events.pipe( filter( event => event instanceof NavigationEnd ), map( () => activatedRoute ), map(
constructor( router: Router, activatedRoute: ActivatedRoute ) {
router.events.pipe(
filter( event => event instanceof NavigationEnd ),
map( () => activatedRoute ),
map( r => {
while ( r.firstChild ) {
r = r.firstChild;
}
return r;
} ),
switchMap( route => route.url ),
).subscribe( u => {
// ... do something with u
} );
}
现在我还想订阅当前路由的可观察数据。如何将可观察对象拆分为url部分和数据部分,并为这两个可观察对象订阅一次
我尝试了
zip()
,分区()
,组合测试()
,但没有成功。或者我应该使用concatMap()
?使用combine latest来联合两个url和数据流吗
switchMap(route => combineLatest([route.url, route.data]))
查看
merge
运算符,它仅在router.events
发出值时触发,而不是在router.data
changesture时触发,但在这种特殊情况下,这两个源是相互依赖的。router.data仅在导航结束时更改。因此,它在这里应该可以正常工作,但在中使用最新的from(route.data)
,route
没有定义ups,应该是激活的route.data
。我会更新answer@Andrei:在withLatestFrom(activatedRoute.data)
中,activatedRoute.data
也为空(是的,我仔细检查了路由)。