我使用以下代码从data
activatedroute
this.router.events
.filter(event => event instanceof NavigationEnd)
.map(() => this.activatedRoute)
.map(route => {
while (route.firstChild) route = route.firstChild;
return route;
})
.filter(route => route.outlet === 'primary')
.mergeMap(route => route.data)
.subscribe(res => {
this.publicRoute = res["publicRoute"] || false;
});
我使用几乎相同的代码段从同一路线中检索queryPrams
。
this.router.events
.filter(event => event instanceof NavigationEnd)
.map(() => this.activatedRoute)
.map(route => {
while (route.firstChild) route = route.firstChild;
return route;
})
.filter(route => route.outlet === 'primary')
.mergeMap(route => route.queryParams)
.subscribe(res => {
this.internaltoken= res["internaltoken"] || false;
});
我很想知道是否有办法只使用一个代码段来订阅这两种代码段。我知道Observable.combineLatest
,但我无法弄清楚如何融入上述渠道。
答案 0 :(得分:0)
您可以使用此方法:
kotlin_version = 1.1.1
要注意事项:
const route$ = this.router.events
.filter(event => event instanceof NavigationEnd)
.mapTo(this.route)
.map(route => {
while (route.firstChild) route = route.firstChild
return route
})
.filter(route => route.outlet === 'primary')
const latest$ = route$
.switchMap(route => route.data)
.combineLatest(route$.switchMap(route => route.queryParams))
.subscribe(([data, queryParams]) => {
/* ... */
})
- 存储到单独的变量并在第二个route$
流中特别重用latest$
而更容易。combineLatest
而不是mergeMap
,而我确保只会订阅最新路线的switchMap
和data
。在这种情况下可能不需要,但我认为它通常更合适。我还在第3行使用queryParams
只是为了简化事情。PS如果您计划将来更新Angular 6,我建议您查看github repo运算符。