Angular 角度:如何使用路由器事件订阅可观察内部服务的多个部分

Angular 角度:如何使用路由器事件订阅可观察内部服务的多个部分,angular,observable,Angular,Observable,在我的导航服务中,我想在一个订阅中订阅当前选定的路由url和数据 要订阅路由url,我将写: constructor( router: Router, activatedRoute: ActivatedRoute ) { router.events.pipe( filter( event => event instanceof NavigationEnd ), map( () => activatedRoute ), map(

在我的导航服务中,我想在一个订阅中订阅当前选定的路由url和数据

要订阅路由url,我将写:

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
也为空(是的,我仔细检查了路由)。