2017-05-29 3 views
0

Principalクラスがあり、providersを使用してDI用に使用したいと考えています。このプリンシパルクラスは典型的なAPI(isInRole,identityなど)を持っています。このクラスのコンストラクタは、ユーザー名、ID、ロールなどを取ります。サービスの作成に必要なデータにajaxコールが必要なときにDIを使用する方法

私が達成したいのは、DI経由で利用できるようにすることです。 @Componentのサービスと他の@Injectableサービス...ただし、このクラスのインスタンスを1つ作成するには、REST APIを呼び出して現在のユーザーに関する情報を取得する必要があります(ID、ロール、およびその他の情報が返されます)したがって、インスタンスに関する情報は、AJAX呼び出しが終了するまで認識されません。

まず、私はprovidersuseFactoryと使用することを考えていましたが、どうすればいいのか分かりません。工場の機能は約束/観測可能性を返す必要があり、私はDIを使用したいprivate principal: Principal ...

どのようなヒントをしたいのですか?

+0

あなたのケースについての詳細をお知らせください。 http://stackoverflow.com/help/mcveを参照してください。あなたがバックエンドから得ている情報が石で刻まれておらず、アプリのライフサイクル中に変更される可能性があることを考えると、既存の回答が示唆するように、ルートリゾルバである必要があります。 – estus

答えて

0

アプリが起動する前に(またはPrincipalクラスがインスタンス化されているコンポーネント)AJAXリクエストを実行するだけです。もしPrincipal AJAXコールがnot authorized応答を返すことができる可能性があるなら - それはまたPrincipal\PrincipalServiceによって内部的に適切に処理されるべきです。

あなたは右(あなたのメインAppModule.bootstrap()機能を提供することを)AppComponentメインから「アプリケーションの初期化」を行うことができますが、それはあなたが非常に早いPrincipalを使用する場合は特に、難しいかもしれません。

APP_INITIALIZERを介して "正しい"方法...それは複数の例がありますので、私はそれらをコピー/貼り付けしたくありません。たとえば:https://github.com/angular/angular/issues/9047

APP_INITIALIZERMUSTリターンPromise、ないObservableことに、注意してください。

関連する問題