首页 文章

Angular 2 Router - 为应用程序的起始页面路由

提问于
浏览
1

我刚刚将Angular2升级到最终版本,我正在寻找好的做法 .

我有一个开始页面,在开始时显示一组用户,该组通过访问REST服务而闻名 .

我去了www.app.com - angular app启动,它检索它应该显示的组 . 此时我希望应用程序转到www.app.com/group/group1 - 但在检索组名之前,angular已尝试导航并抛出异常,因为它找不到路由 .

我想出了2个黑客:

  • make''路由转到GroupSelector组件,并从那里导航组名解析后,它很糟糕,因为我真的想在另一个组件上启动我的应用程序

  • 等待组名,然后使用Router.navigate导航,这会引发异常,因为找不到路由,即使app工作正常

使用以前版本的Angular2 Router(beta 1),我启动了像www.app.com这样的应用程序 - 应用程序已加载,它检索了一个组的名称,然后使用Router.navigate应用程序将加载Groups组件并提供正确的组名参数对于这个组件,一切都运行得很好

有没有办法如何延迟路由器,只有在从REST服务检索到必要的数据后才重定向到正确的路由?

1 回答

  • 2

    在路由器配置文件中使用resolve属性

    // team.resolve.ts
    @Injectable()
    class TeamResolver implements Resolve<{}> {
      constructor(private http: Http) {}
      resolve(
        route: ActivatedRouteSnapshot,
        state: RouterStateSnapshot
      ): Observable<any>|Promise<any>|any {
        return this.http.get("/api/team/" + route.params.id);
      }
    }
    
    // app.module.ts
    @NgModule({
      imports: [
        RouterModule.forRoot([
          {
            path: 'team/:id',
            component: TeamCmp,
            resolve: {
              team: TeamResolver
            }
          }
        ])
      ],
      providers: [TeamResolver]
    })
    class AppModule {}
    

    https://angular.io/docs/ts/latest/api/router/index/Resolve-interface.html

相关问题