実際にアプリケーションをロードする前に、サーバーからすべてのメッセージをロードするアプリケーションがあります。angle 2最初のルーティングの前に初期関数を呼び出します。
httpリクエストをOnInitのアプリケーションコンポーネントに入れました。
しかし、最初のページを取得する前にルーティングを「待機」させる方法はなく、アプリケーションは空のメッセージで開始しています。
これを行う方法はありますか?
実際にアプリケーションをロードする前に、サーバーからすべてのメッセージをロードするアプリケーションがあります。angle 2最初のルーティングの前に初期関数を呼び出します。
httpリクエストをOnInitのアプリケーションコンポーネントに入れました。
しかし、最初のページを取得する前にルーティングを「待機」させる方法はなく、アプリケーションは空のメッセージで開始しています。
これを行う方法はありますか?
あなたはこのために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
に注入した後、ルート
シンプルなソリューションを持っている必要があります。中
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
にリダイレクト。