Angular 角度路由器模块ActivatedRoute存在时返回null firstChild

Angular 角度路由器模块ActivatedRoute存在时返回null firstChild,angular,angular-routing,angular-router,Angular,Angular Routing,Angular Router,遵循托德格言的一个优秀指南()我遇到了一个无法解释的情况 下面是一些代码: this.router.events .filter((event) => event instanceof NavigationStart) .map(() => this.activatedRoute) .map((route) => { console.log('route pre-while: ', route); // Shows ActivatedRo

遵循托德格言的一个优秀指南()我遇到了一个无法解释的情况

下面是一些代码:

this.router.events
    .filter((event) => event instanceof NavigationStart)
    .map(() => this.activatedRoute)
    .map((route) => {
        console.log('route pre-while: ', route); // Shows ActivatedRoute object
        console.log('pre-while route child: ', route.firstChild); // null
        while (route.firstChild) {
          console.log('while route: ', route);
          route = route.firstChild;
        }
        console.log('post while route: ', route);
        return route;
      })
    .subscribe((elem) => {
        console.log('elem: ', elem);
    });

在这个代码块中,“route pre while”log语句在Chrome控制台中显示一个ActivatedRoute对象。如果我在Chrome的控制台窗口中展开该对象,我可以单击
firstChild
属性并看到另一个
ActivatedRoute
对象,这与我预期的一样。但是,问题是,第二个日志语句“pre while route child”将
null
输出到控制台。此外,WHILE循环从不执行,因为
route.firstChild
的计算结果为
null
。谁能给我解释一下这是为什么???为什么我可以记录对象并看到一个
firstChild
,但在尝试访问它时立即得到null?

因此,实际的路由器事件很重要。拦截NavigationStart事件没有足够的时间填充ActivatedRoute对象。现在太早了。拦截NavigationEnd似乎是一张罚单,因为那时所有路线的评估和装载都已经完成。

感谢您提出这个问题并自己找出解决方案

对于将来登陆这里的人们来说,这将是有效的解决方案

从'@angular/Router'导入{Router,NavigationEnd};
.
.
建造师(
...
专用路由:ActivatedRoute){
}
.
.
这是路由器事件
.filter((事件)=>NavigationEnd的事件实例)
.map(()=>this.activatedRoute)
.map((路线)=>{
console.log('route pre-while:',route);//显示ActivatedRoute对象
console.log('pre-while route child:',route.firstChild);//null
while(route.firstChild){
log('while route:',route);
route=route.firstChild;//如果场景中需要,则为有条件
}
log('post while route:',route);
返回路线;
})
.订阅((元素)=>{
log('elem:',elem);

});
my bad,我看到你为我删除了它。不用担心,只是想确保你明白为什么。当尝试使用Angular 10执行上述操作时,tslint说:“Observable”类型上不存在属性“filter”