サービスを使用してAngular 2アプリケーションに初期値を格納(共有)するにはどうすればよいですか? 私は、サーバーからリソース、構成、その他の配列やオブジェクトとして多くのデータをロードするサービスを持っています。 コンポーネントをロードするたびに、またはビューにルーティングするたびにこのデータをロードする必要はなく、アプリケーションの起動時にこれらのオブジェクトと配列が既にロードされていて、必要に応じてオプションでリロードできます。 この値を保存する場所とサービスを使用するコンポーネント間で共有する方法はどこですか?おかげさまで 角度2、サーバーから一度データをロードして結果をコンポーネントに共有するベストプラクティス
答えて
あなたはおよそ共有サービスを考えると、確かにのみ単一のインスタンスが間で共有されていることを確認する必要がありますコンポーネント。
shared service and shared object demo
注 :
はブートストラップ機能でサービスを登録することを忘れないでください。コードを深く観察してください。あなたはあなたが望むものを得るでしょう。ルーティング部分は示されていません。更なる実施のためのサーフplunk
service.ts
正しい場所は間違いなくサービスです。このサービスをプロバイダーとして1か所にのみ追加すると、1つのインスタンスがアプリケーション全体と共有されます。あなたは
bootstrap(AppComponent, [HTTP_PROVIDERS, MyService]);
@Component({
selector: 'some-comp',
providers: [/* don't add MyService here !! */]})
class MyComponent {}
それを必要とするツリー内の唯一の最高のコンポーネントにサービスを提供する方が良いと思いませんか?関係のないコンポーネントは、新しく作成されたサービスを認識していませんか? – ReactingToAngularVues
サービスを必要とするコンポーネントが1つだけの場合はまったくです。共有instamceが必要な場合でも、サービスを注入するすべてのコンポーネントで提供される最も頻繁なエラーの1つにすぎません。したがって、コンポーネントに提供することを提案するのは少し慎重です。 –
@GünterZöchbauerベースコンポーネントからデータを共有する例を教えてください。 – Rex
ギュンターが共有サービスについて完全に正しいとは避けたいものです - あなたは、各コンポーネントにプロバイダにそれを追加した場合、各コンポーネントは、独自のインスタンスを取得します!
ここでは、次の呼び出しのためのいくつかの観測に依存しているHTTPのための詳細およびキャッシュされたデータは以下のとおりです。
export class SharedService {
constructor(private http:Http) {
}
getData() {
if (this.cachedData) {
return Observable.of(this.cachedData);
} else {
return this.http.get(...)
.map(res => res.json())
.do((data) => {
this.cachedData = data;
});
}
}
}
あなたの実装は非常に面白いです!だから、すべてのコンポーネントは、新鮮なデータやキャッシュされたデータを読み込むために "subscribe"関数を使うことができます。ありがとうございました –
はい、まさにです。それは加入者のために完全に透明です;-)あなたは大歓迎です! –
私はこの構造体を実装しようとしていますが、私の唯一の疑問は、私のAPIがオブジェクト配列を返しますが、私の "GetData"では返されますが、(例えば特定のインデックスにマッチする)サーバーが新しいオブジェクト配列を返すときに(例えば、サービス内の「リロード」機能の後に)、すべてのコンポーネントにオブジェクトを追加します。 この結果を達成するための提案はありますか?もう一度あなたの時間に感謝します。 –
- 1. 角度2のデータ共有アプローチ
- 2. 角度2ユニバーサル - サーバー側レンダリング
- 3. コンポーネント間の角度2の値渡し
- 4. データを連結する角度バインドテーブル
- 5. 角度1.2と角度2の共存と増分アップグレード
- 6. 角度2のコンポーネントからパイプを作成して呼び出す方法は?
- 7. どのように角度角度2のpolyfils角度RC.1?
- 8. asp.net mvc4と角度、2ページ共有の値
- 9. 多段階フォームと角度ui-routerとのデータの共有
- 10. 角度2孫から親コンポーネントにイベントを送信する方法は?
- 11. 角度2 | MDLコンポーネントを動的に作成する
- 12. JSONオブジェクトを角度クラスに分解する角度2
- 13. 角2の複数のコンポーネントを持つwebsocketデータを共有する
- 14. 角度2 routeconfigケース感度
- 15. 角度コンポーネントで 'require'を使用する
- 16. 角度2とGoogleマップAPI。コンポーネントからマップのオブジェクトを操作する
- 17. 角度2イベントエミッタ?
- 18. 角度2 OpaqueToken
- 19. 角度2
- 20. 角度2:ルータ
- 21. 角度2エラー
- 22. 角度2のパイプからデータを取得
- 23. 角度GETデータ
- 24. 角度2のコンポーネントを表示する方法は?
- 25. 別のコンポーネントからページをロードするために、別のコンポーネントから角度2のルートを呼び出しますか?
- 26. 角度1.5のコンポーネントとディレクティブ
- 27. 角度から
- 28. 角度2 - すべてのコンポーネントのグローバル変数
- 29. 角度角度からコントローラースコープにアクセスする方法
- 30. 角度2のシード - サスファイルのコンパスサポートを有効にする方法
ページが更新されると、情報のために古い変数が返されます。Info = {name: "Jack"}; – Diego