Angular 4:如何在应用程序init上通过REST设置路由器配置

时间:2017-08-22 20:58:49

标签: angular router resolver

我正在尝试根据REST API中的数据设置路由器配置(包含允许的URL等)。在这种情况下,url / test2应该以HomeComponent结束。 Url test2在初始路由配置中不存在,它由promise承担。

到目前为止,我使用的方法如下:

    RouterModule.forRoot([
  {
    path: '',
    component: HomeComponent
  },
  {
    path: '**',
    resolve: {
      route: RouteResolver
    },
    component: ErrorComponent
  }
])

解析器负责添加新路线。

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any>|Promise<any>|any {
return new Promise((resolve, reject) => { // just to fake api call
  console.log(this.router.config);
  this.router.config.push(
    {
      path: 'test2',
      component: HomeComponent
    }
  );
  this.router.resetConfig(this.router.config);
  console.log(this.router);
  resolve();
});

}

这种方法的问题似乎我已经太迟了一步。新路由确实被添加到路由配置中,配置确实被重置。但是在解析器执行期间,应用程序似乎还没有意识到这一点。所以我仍然在ErrorComponent。

任何想法是如何完成的?也许我在错误的区域寻找解决方案:(

1 个答案:

答案 0 :(得分:2)

如我的评论中所述,您必须将动态路线放在通配符路线之前,然后您可以使用Router.navigateByUrl导航到添加的路线,但您必须检查您想要去的路线是否是您的动态路线。因为否则你会陷入无休止的循环。

我用一个例子做了plunker

注意:每次调用CanActivate后卫时,该示例都会添加路由,因此您必须在添加新路由时过滤掉现有路由。