2017-04-19 10 views
0

AngularJSを少し勉強してテストすると、いくつかのデータをいくつかのコントローラで利用できるようにサービスを構築する方法に疑問があります。AngularJSでサービスを構成してデータを利用できるようにする方法

私はJSONファイルを持っています。私はそれを私のサービスからロードし、私のコントローラを介してこのサービスを使ってデータにアクセスしたいと思います。

dashboardController.factory ('peopleRepository', function($http) { 
return { 
    getAllPeople: function() { 
     return $http.get("people.json"); 
    } 
} 
}); 

簡単でわかりやすい:

今の私のサービスは、次のようになります。それは罰金だと動作します

dashboardController.controller ('genderCtrl', function ($scope, $rootScope, peopleRepository) { 
    $scope.males = 0; 
    $scope.females = 0; 

    $scope.people = peopleRepository.getAllPeople().success(function(users) { 
    console.log ("SUCCESS -< ", users); 
    }); 

}); 

...そしてもちろん、すべてのもの: はその後、私のコントローラでは、私はこのような何かを行います。 しかし、私はこれが正しいアプローチではないと確信しています。私はいくつかのコントローラでこのデータにアクセスする必要があり、これは基本的にファイルが何度も読み込まれ、成功イベントがコンテンツをロードするのを待つたびに読み込まれることを意味します。エレガントではありません。 初心者のための提案/ヒント?

+0

あなたは(あなたが最初のロード後にキャッシュにサービスを利用することを可能にする)SPA '単一ページ-app'をするアプリケーションを構築することができます

は、ここで簡単な例を示します。 - ただし、アプリケーションを複数のコントローラに分けている場合は、必要なときにいつでも注入する必要があります。 (私は忘れましたが、アプリケーションにサービスをキャッシュすることもできます) 残りのアプリケーションをどのように構造化しましたか? –

答えて

3

データをサービスに保存するcacheオブジェクトを作成します。第1のコントローラは、取り込んだデータをそこに保存する。データを要求するもう1人は$ httpをもう一度呼び出すのではなく、キャッシュオブジェクトから取得します。

私はあなたもまた、 $ qあなたのデータを得るための約束の基底関数を作成します。

また、$ http angularjsサービスで組み込みキャッシュを使用することもできます。詳細については、How to cache an http get service in angularjsを参照してください。

+0

あなたのアプローチはロジックに聞こえるが、彼の答えでも@Nowresが示唆している解決策ではないのだろうか? –

+0

はい。また、.getが成功しない場合に実行される 'then'の2番目のコールバックを使用することをお勧めします:) –

2

少なくとも、単純なキャッシュメカニズムを追加する必要があります。

dashboardController.factory ('peopleRepository', function($http, $q) { 
    var people; 

    return { 
     getAllPeople: function() { 
      if (!people) { 
       // endpoint value may be put in a constant 
       people = $http.get("people.json").then(function (result) { 
        return result; 
       }); 
       // A generic error handling mechanism can also be used 
      } 
      return people; 
     } 
    } 
}); 
+0

ロードが完了する前に、あなたのソリューションは空のオブジェクトを返しませんか? –

+0

いつも約束を返す –

関連する問題