Javascript 角度路由器从根组件获取子参数

Javascript 角度路由器从根组件获取子参数,javascript,angular,router,Javascript,Angular,Router,我在我的app.component.html中有这个结构: <app-main-nav></app-main-nav> <router-outlet></router-outlet> 我试图从我的MaiNavComponent中的PostComponent页面访问参数,但它抛出了一个错误 export class MainNavComponent implements OnInit { constructor( private route:

我在我的
app.component.html
中有这个结构:

<app-main-nav></app-main-nav>
<router-outlet></router-outlet>
我试图从我的
MaiNavComponent
中的
PostComponent
页面访问参数,但它抛出了一个错误

export class MainNavComponent implements OnInit {

  constructor( private route: ActivatedRoute) {
    route.params.subscribe(console.log)
  }
}
如何从
MainNavComponent
获取
后组件的
:id

我试着这样做:

 route.params.subscribe(console.log)
这里我得到一个空的对象

这是:

 route.firstChild.params.subscribe(console.log)
无法读取null的属性“params”


问题在于,
ActivatedRoute
仅在插座中加载的组件内部可用(
route outlet
)。在外部组件中,您可以注入路由器并按如下方式使用它:

export class MainNavComponent implements OnInit {

    constructor(private router: Router) {}

    ngOnInit() {

        // Fires when the url changes
        this.router.events.subscribe(data => {
            // Only handle final active route
            if (data instanceof NavigationEnd) {

                 // parsedUrl conatins params, queryParams 
                 // and fragments for the active route
                 let parsedUrl = this.router.parseUrl(this.router.url);

                 console.log(parsedUrl);
            }
        });
    }
}

我希望这将对您有所帮助。

您必须通过快照从URL.Uodate构造函数中获取ID,如下所示

constructor( private route: ActivatedRoute) {   
  }
ngOnInit() {
  // (+) converts string 'id' to a number
  let id = +this.route.snapshot.params['id'];


}
构造函数(
专用路由器:路由器,
专用activatedRoute:activatedRoute){
}
恩戈尼尼特(){
this.loadParams();
}
私有loadParams():void{
this.router.events.subscribe(事件=>{
if(NavigationEnd的事件实例){
让activatedRoute=this.activatedRoute.firstChild;
而(!activatedRoute){
activatedRoute=activatedRoute.firstChild;
}
const value=activatedRoute.snapshot.paramMap.get('parmeter key');
}
});
}

否,但参数是空的,它仅在带有参数的路由中起作用,而不是从根组件将while循环修改为
while(activatedRoute.firstChild!==null)
并且您的代码对我很有效。谢谢
constructor( private route: ActivatedRoute) {   
  }
ngOnInit() {
  // (+) converts string 'id' to a number
  let id = +this.route.snapshot.params['id'];


}