【发布时间】:2017-07-29 05:19:26
【问题描述】:
我目前正在订阅路由器事件以在路由更改时更改页面的标题,就像这样
this.routerSub$ = 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((event) => {
title = event['title']
? `${event['title']}`
: 'Default Title'
this.title.setTitle(title);
});
我的问题是,在某些情况下,我想将标题设置为 url 中的值(路由的一部分)。我该怎么做?我知道我不能订阅 url 以及事件,但很难弄清楚要在里面映射什么。
这是我正在尝试但失败的方法
this.router.events
.filter(event => event instanceof NavigationEnd)
.map(() => {
return this.activatedRoute
})
.switchMap(route => {
return route.data.combineLatest(route.url, (data, url) => {
return data['title'] ? `Title: ${data['title']}` : url.join('');
});
})
在 .switchMap 行上,路由的类型为 ActivatedRoute,route.data 的类型为 Object,而我在 combineLatest() 行上遇到的错误是
route.data.combineLatest 不是函数
【问题讨论】:
-
您的意思是要同时观察
events和url并以某种方式组合它们的值?如果是这样,combineLatest或withLatestFrom会有所帮助。 -
感谢您指出正确的方法。所以我基本上创建了一个任何对象并将事件和 url 作为道具分配给它?也许一个小样本会帮助我