6

我有一个 angular2 应用程序(RC6 版本),其中一些重要的全局参数是使用在启动时收集此文件的服务从配置文件加载的:

@NgModule({
imports:  [ BrowserModule, FormsModule, HttpModule, AppRoutes, SomeCustomModule ],
declarations: [ AppComponent ]
providers: [
            ConfigurationService,
            {
              provide: APP_INITIALIZER,
              useFactory: (config: ConfigurationService) => () => { 
                             return config.load().then(configParams=> { return true;});      
                          },
              deps: [ConfigurationService, HttpModule],
              multi: true
            }
          ],
bootstrap:[ AppComponent ]
})
export class AppModule { }

如这个片段所示,我使用我称之为ConfigurationService的东西,它通过 http 调用读取配置文件并返回一些参数(作为 Promise)。如果一切顺利,应用程序会完美加载,并且这些配置参数可以在整个子模块等中访问。

问题是,如果此配置文件未按预期加载,我如何阻止应用程序加载子模块?(请注意,AppComponent 本质上只是一个路由器出口,重定向到由多个子模块定义的其他路由)。我可以“禁用”或重定向到错误页面,而不是加载请求路由定义的模块/组件吗?

4

1 回答 1

10

要禁用页面的初始路由,并让它根据您必须在对象ConfigurationService中设置的处理:initialNavigationfalseAppRoutes

export const AppRoutes = RouterModule.forRoot(ROUTES, {initialNavigation : false});

然后,您必须在您的内部ConfigurationService注入router并使用它来根据您的配置进行导航。

另一种选择是使用canActivate路由挂钩。在这个钩子中,你可以注入ConfigurationService并让它决定它是否可以加载这个页面。


更新

对于 angular 的最新版本,不推荐使用 的值,请false改用:initialNavigation'disabled'

{ initialNavigation : 'disabled' }
于 2016-09-14T18:44:33.347 回答