2017-11-19 8 views
0

角度2の問題が発生しました 他のコンポーネントを読み込む前に、HTTPリクエストでサーバーからデータを取得する必要があります。リクエストの応答が来るまでの任意のコンポーネント。あなたはlazy loadingを使用する必要がありますデータベース角2、httpリクエストの応答までアプリの読み込みを停止する方法

+0

[RouterResolve](https://rahulrsingh09.github.io/AngularConcepts/guard)あなたはどうあるべきかであります –

答えて

0

からデータを取得するまで、アプリのロードを停止する方法別の言葉で

。要求によってのみロードされるモジュールでアプリを分けるのに役立ちます。

+0

遅延読み込みは、アプリケーションのすべてのモジュールを読み込みたくない場合に便利です。コンポーネントの重要なデータを取得するには、リゾルバがオプションです –

1

は、第1のデータを取得し、例えば

をデータを受信した後にコンポーネントを初期化するためにリゾルバを使用します。UserComponentは、ユーザーのデータを取得した後に初期化されるだろう。

{ path: 'user', component: UserComponent, resolve: { users: UserDataResolver } 

詳細については、私の次の答えを確認してください。 Fetching data from a ReST Micro service in angular 2

デモ:https://plnkr.co/edit/uSgmIw?p=templates

しかし、UXを破ることができコンポーネントをロードする前に、データをフェッチします。場合によってはそれを必要とすることもありますが、ローカルローダー戦略がより優れている場合がほとんどです(データのフェッチ中にローダーを表示する)。

1

から角度4.3.0 HttpClientModuleはインターセプターをサポートします。データを取得するまで、ロードインジケーターを表示することができます。これにより、ユーザーエクスペリエンスが向上します。 https://angular.io/guide/http

+0

私はこのアプローチを保証することができます。特に、trueまたはfalseの代わりにリクエスト数を使用する場合は、最も簡単でストレスの少ないアプローチです。 –

0

httpリクエストが完了する前にAngularアプリの初期化を傍受する方法を探しているような感じです。

もしそうなら、私はAPP_INITIALIZERで

を探してお勧めしますこれは、角度でロードプロセスにフックするために使用することができ、あなたは約束を返すサービスをトリガすることができます。その約束が解決されるまで、残りのアプリケーションは読み込まれません。

Promises、NOT Observeablesを使用することを覚えておくことが重要です。 APIのドキュメントはそれについて明確ではありません。

詳細情報はここで見つけることができます:

関連する問題