2017-05-13 9 views
1

私は、ルートコンポーネントが読み込まれる前にサービスを呼び出す方法を見つけました。しかし、私はサービスが正常に仕事を終えるまで、アプリ全体を待たせる方法を見つけることはできません。つまり、同期呼び出しを行う方法です。サービスはAJAXを介して必須の設定をロードしており、コールが終了するまでアプリケーションの開始を保留する必要があります。APP_INITIALIZERの実行が終了するまで、Angular 2+アプリの読み込みを停止しますか?

router-outlet*ngIfを追加するとエラーが発生します。

CanActivateで経路をブロックすると、表示が停止することがありますが、次に、ローダー画面を定義して、約束が満たされたらコードから適切な経路を呼び出す必要があります。あまりエレガントではありません。

特定の値がtrueになるまで、Angular to STFUに伝える方法はありますか?

+0

は、呼び出しを行うコードを表示プロバイダの配列に追加し、 。 –

+0

これはブートストラップ時に実行される機能です。https://pastebin.com/NvtTKa5M –

+0

約束を使用してください:https://docs.angularjs.org/api/ng/service/$q。例:サービスが完了したら、約束を解決してloadsettings関数から戻ります。 –

答えて

0

どのようにAPP_INITIALIZERを使用しているか分かりませんが、プロバイダのファクトリ関数をセットアップしていると仮定します。関数が、あなたのサービスによって行われたAPI呼び出しの約束を返すことを確認した場合、約束が解決されるまで、アプリケーションの初期化はブロックされます。

など。それが現在であるところ

import { ApplicationSetupProvider } from './app.initializer'; 

app.initializer.tsあなたapp.module.ts輸入で

import { FactoryProvider, APP_INITIALIZER } from '@angular/core'; 
import { MyDataService } from './core/my-data.service'; 

export function initialAppSetup(provider: MyDataService) { 

// MyDataService's getInitialData must return a promise 
return() => provider.getInitialData() 
} 

export const ApplicationSetupProvider: FactoryProvider = { 
provide: APP_INITIALIZER, 
useFactory: initialAppSetup, 
deps: [MyDataService], 
multi: true 
} 

ApplicationSetupProviderというファイルを作成し、

providers: [ AuthorizationSetupProvider ], 
関連する問題