2017-05-30 7 views
0

実際にアプリケーションをロードする前に、サーバーからすべてのメッセージをロードするアプリケーションがあります。angle 2最初のルーティングの前に初期関数を呼び出します。

httpリクエストをOnInitのアプリケーションコンポーネントに入れました。

しかし、最初のページを取得する前にルーティングを「待機」させる方法はなく、アプリケーションは空のメッセージで開始しています。

これを行う方法はありますか?

答えて

2

あなたはこのためにAPP_INITIALIZERを使用することができます。

はあなたのAppModuleのプロバイダの配列にこれを追加します。

{provide: APP_INITIALIZER, useFactory: appInitFactory, deps: [MsgLoader], multi: true} 

そして、あなたのメッセージを取得し、機能ファクトリを作成します。これは、実際のPromiseを返す矢印関数を返す必要があります:

export function appInitFactory(msg: MsgLoader):() => Promise<any> { 
    return() => msg.loadMessages(); 
} 

あなたはAppComponentロードという気が、そのサブページがロードされてについての心をしない場合、あなたはあなたのルートのルーティングにinitialNavigationプロパティを使用することができます。

RouterModule.forRoot(AppRoutes, {initialNavigation: false}) 

これにより、最初のモジュールのロードが防止されます。あなたのルートを定義する場合、

prehomeページを追加し、PreHomeComponent:ただし、いくつかのサービスが必要なモジュールにあなたのメッセージの読み込みを処理するあなたのAppComponentに注入した後、ルート

0

シンプルなソリューションを持っている必要があります。中

imports: [ 
     RouterModule.forRoot([ 
      { path: '', redirectTo: 'prehome', pathMatch: 'full' }, 
      { path: 'prehome', component: PreHomeComponent }, 
      { path: 'home', component: HomeComponent }, 
      { path: 'counter', component: CounterComponent }, 
      { path: 'fetch-data', component: FetchDataComponent }, 
      { path: "job/:id", component: JobComponent }, 
      { path: '**', redirectTo: 'prehome' } 
     ]), 
     MaterialModule 
    ]  

あなたPreHomeComponentサーバーから必要なメッセージをロードしhomeにリダイレクト。

関連する問題