路由器导航似乎并没有改变组件

时间:2017-04-12 12:55:38

标签: angular

我目前有一台路由器(只有相关的)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位置,但是现在,我只是试图抓住路由器。

我不理解导航应该如何工作?

1 个答案:

答案 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) {

解决了这个问题。