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に設定initialNavigationする必要があるものに応じて処理させるには:falseAppRoutes

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

あなたの中ConfigurationServiceに注入し、routerこれを使用して構成に応じてナビゲートする必要があります。

もう 1 つのオプションは、canActivateルーティング フックを使用することです。このフック内に を挿入してConfigurationService、このページをロードできるかどうかを判断させることができます。


アップデート

angular の最新バージョンでは、のfalse値は非推奨です。代わりに次initialNavigationを使用します。'disabled'

{ initialNavigation : 'disabled' }
于 2016-09-14T18:44:33.347 に答える