我目前有一台路由器(只有相关的)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返回null,因此无效,应用确实路由到/
,但组件保持不变。因为路径中没有:org
,API调用失败(我检查以确保传入某种字符串),并且应用程序崩溃时出现此错误:
ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'navigate' of undefined
我可以修复崩溃部分,但我期待的是,如果你去了一个无效的位置,我想把你转发到其他地方。从长远来看,这将是一个404位置,但是现在,我只是试图抓住路由器。
我不理解导航应该如何工作?
答案 0 :(得分:0)
一位同事向我指出我在 class AppAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
'css/site.css',
];
public $js = [
];
public $depends = [
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapAsset',
];
}
使用标准功能,而不是箭头功能。因此。 .map
是失败的部分,而不是实际的组件加载。
更改
this.router.navigate
到
return this.orgService.getOrgData(route.params['org']).map(function (org) {
解决了这个问题。