2017-03-01 8 views
0

私はCan_ctivateでサーバーとガードのデータを読み込むAPP_INITIALIZERを使用します。私は角度2.4.8を使用し、私は自分のガード内のCanActivateがAPP_INITIALIZERの前に呼ばれていることを確認します。角度2.4.8 App_Initializer

正しい動作ですか?

{ provide: APP_INITIALIZER, useFactory: (config: ContextService) =>() => config.validate(), deps: [ContextService], multi: true } 

関数config.validate()は約束を返します。ここでは、コード

validate() { 
    return Observable.forkJoin(
     this.http.get('/api/v1/check').map(res => res.json()), 
     this.http.get('/api/v1/me').map(res => res.json()) 
    ).map(
     data => { 

      console.log("data loaded"); 

      ... stuff ... 

      return this.hasValidLicence; 
     }).toPromise(); 
} 

おかげ

+0

この問題は、https://github.com/angular/angular/pull/14681以降に修正されています。角度2.4.9を試してください。それは正常に動作するはずです。ありがとう。 :) – Nimirole

答えて

1

まあ、あなたの質問への答えは、両方のはいなしです。バージョン2.4.8のルータが変更され、ナビゲーションがAPP_INITIALIZERループ内にも開始されます。これは、ContextServiceの工場が終了する前にCanActivateが発生する可能性があることを意味します。ルート(NavigationEnd)は、すべてのAPP_INITIALIZERタスクが完了するまで解決されませんが、それはあなたが望むものではない可能性があります。あなたは、あなたが以下のいずれかを実行できるページに移動/読み込みが完了する前にデータが存在することを確認するには

:彼らは実現するので、バージョン2.4.7へ

  • ダウングレードをこれではありませんそのルートがアクティブ(および解決)されていないので、あなたの工場は
  • 使用クイックフィックスは、公式レポでhttps://github.com/angular/angular/issues/14588
  • を説明 データを読み込みが完了するまで、すでに
  • を戻ってきたと満足しているとコミットソリューションの人々があなたのCanActivateにContextService依存性を追加します。
関連する問題