我想从router.events中仅提取类型为NavigationEnd的最后一个事件条目。但不知何故,我找不到合适的方法来做到这一点。无论我尝试什么,下面的代码剪断是访问这些感兴趣的对象的唯一方法。
let ne: any;
router.events.filter(e => e instanceof NavigationEnd)
.forEach(e => {
ne = e as NavigationEnd;
});
console.log('target page: ', ne.urlAfterRedirects);
但我真的必须使用.forEach()让它运行所有条目然后使用最后一个条目吗?是不是有更好的方法来处理事件作为一种数组,然后说
ne = arrayOfEvents[arrayOfEvents.length-1]
我对此感到疯狂,但似乎我看不到树上的木头......
答案 0 :(得分:4)
好的,在阅读了上面发表的文章并重新思考我真正想要实现的目标之后,我发现我的方法肯定太复杂了。因为实际上我只需要访问当前调用的路由。所以我从零开始,遇到了这个小但非常有效的解决方案:
this.router.events.subscribe(value => {
console.log('current route: ', router.url.toString());
});
感谢所有在oder中发表评论的人来支持我!它帮助很多,因为我能够束缚松散的目标。
答案 1 :(得分:4)
PS。有一种更好的方法可以使用'typeguard'进行过滤,您无需重新声明即可获得正确的类型:
firstChildData$ = this.router.events.pipe(
filter((e): e is NavigationEnd => e instanceof NavigationEnd),
map(e => { // e is now NavigationEnd }
这在严格模式下实际上是必需的。
答案 2 :(得分:0)
如果您使用的是ngrx效果,则可以创建一个监听路由器事件的效果:
--shared