获取activatedRoute的路由数据和queryaparams

时间:2018-06-08 18:56:29

标签: angular rxjs angular5

我使用以下代码从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,但我无法弄清楚如何融入上述渠道。

1 个答案:

答案 0 :(得分:0)

您可以使用此方法:

kotlin_version = 1.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$而更容易。
  2. 我使用combineLatest而不是mergeMap,而我确保只会订阅最新路线的switchMapdata。在这种情况下可能不需要,但我认为它通常更合适。我还在第3行使用queryParams只是为了简化事情。
  3. PS如果您计划将来更新Angular 6,我建议您查看github repo运算符。