2016-03-14 8 views
15

サービスを使用してAngular 2アプリケーションに初期値を格納(共有)するにはどうすればよいですか? 私は、サーバーからリソース、構成、その他の配列やオブジェクトとして多くのデータをロードするサービスを持っています。 コンポーネントをロードするたびに、またはビューにルーティングするたびにこのデータをロードする必要はなく、アプリケーションの起動時にこれらのオブジェクトと配列が既にロードされていて、必要に応じてオプションでリロードできます。 この値を保存する場所とサービスを使用するコンポーネント間で共有する方法はどこですか?おかげさまで 角度2、サーバーから一度データをロードして結果をコンポーネントに共有するベストプラクティス

答えて

13

あなたはおよそ共有サービスを考えると、確かにのみ単一のインスタンスが間で共有されていることを確認する必要がありますコンポーネント。

shared service and shared object demo


ブートストラップ機能でサービスを登録することを忘れないでください。コードを深く観察してください。あなたはあなたが望むものを得るでしょう。ルーティング部分は示されていません。更なる実施のためのサーフplunk

service.ts

​​
+0

ページが更新されると、情報のために古い変数が返されます。Info = {name: "Jack"}; – Diego

10

正しい場所は間違いなくサービスです。このサービスをプロバイダーとして1か所にのみ追加すると、1つのインスタンスがアプリケーション全体と共有されます。あなたは

bootstrap(AppComponent, [HTTP_PROVIDERS, MyService]); 
@Component({ 
    selector: 'some-comp', 
    providers: [/* don't add MyService here !! */]}) 
class MyComponent {} 
+0

それを必要とするツリー内の唯一の最高のコンポーネントにサービスを提供する方が良いと思いませんか?関係のないコンポーネントは、新しく作成されたサービスを認識していませんか? – ReactingToAngularVues

+0

サービスを必要とするコンポーネントが1つだけの場合はまったくです。共有instamceが必要な場合でも、サービスを注入するすべてのコンポーネントで提供される最も頻繁なエラーの1つにすぎません。したがって、コンポーネントに提供することを提案するのは少し慎重です。 –

+0

@GünterZöchbauerベースコンポーネントからデータを共有する例を教えてください。 – Rex

22

ギュンターが共有サービスについて完全に正しいとは避けたいものです - あなたは、各コンポーネントにプロバイダにそれを追加した場合、各コンポーネントは、独自のインスタンスを取得します!

ここでは、次の呼び出しのためのいくつかの観測に依存している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; 
      }); 
    } 
    } 
} 
+0

あなたの実装は非常に面白いです!だから、すべてのコンポーネントは、新鮮なデータやキャッシュされたデータを読み込むために "subscribe"関数を使うことができます。ありがとうございました –

+0

はい、まさにです。それは加入者のために完全に透明です;-)あなたは大歓迎です! –

+0

私はこの構造体を実装しようとしていますが、私の唯一の疑問は、私のAPIがオブジェクト配列を返しますが、私の "GetData"では返されますが、(例えば特定のインデックスにマッチする)サーバーが新しいオブジェクト配列を返すときに(例えば、サービス内の「リロード」機能の後に)、すべてのコンポーネントにオブジェクトを追加します。 この結果を達成するための提案はありますか?もう一度あなたの時間に感謝します。 –

関連する問題