路由器导航似乎并没有被改变成分
问题描述:
我目前得到了与(仅适用)的路由器2条路线:路由器导航似乎并没有被改变成分
{ path: ':org', component: OrgComponent, resolve: [ OrgResolver ] }
{ path: '', component: NotFoundComponent },
解析器是非常直截了当:
constructor(private router: Router, private orgService: OrgService) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Org> {
return this.orgService.getOrgData(route.params['org']).map(function (org) {
if (org === null) {
this.router.navigate['/'];
return null;
} else {
return org;
}
});
}
如果我直接去/
,我打了NotFoundComponent。如果我转到像/invalid
这样的OrgService返回为空的路由(因此无效),该应用确实路由到/
,但组件保持不变。而且因为有在路径中没有:org
,API调用失败(我检查,以确保您在某种字符串传递),以及与此错误的应用程序崩溃:
ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'navigate' of undefined
我可以修复崩溃的部分,但我期望的是,如果你去了一个无效的位置,我想把你转到其他地方。从长远来看,这将是一个404位置,但现在,我只是试图弄到路由器。
我不理解导航应该如何工作?
答
一位同事指出,我在.map
中使用标准函数,而不是箭头函数。正因为如此。 this.router.navigate
是失败的部分,而不是组件的实际加载。
更改
return this.orgService.getOrgData(route.params['org']).map(function (org) {
到
return this.orgService.getOrgData(route.params['org']).map((org) => {
解决的问题。
对于路径为''''且没有子节点的路径使用'pathMatch:'full'' –
您似乎没有正确调用'navigate'方法:'this.router.navigate(['/']); ',而不是'this.router.navigate ['/'];' –
@VohidjonKarimjonov对不起,这个错误是在我写了一堆测试来弄清楚发生了什么的时候出现的。我原来的代码肯定是作为一个函数,而不是数组。 – RhoVisions