本当にあなたの質問でもう一方を使ってください。 RESTfulなインターフェースをお持ちの場合は、RESTfulなインターフェースを使用していない場合は、$ httpがより理にかなっていれば、RESTfulインターフェースに共通のボイラー・プレート・コードを書き留めてしまうので、$ resourceを使用する方が良いです。あなたはデータをいずれかの方法でキャッシュすることができますhttp://www.pseudobry.com/power-up-http-with-caching/
サービスに$ httpまたは$リソースリクエストを入れることは、複数の場所からのデータへのアクセスを必要とし、サービスがシングルトンとして機能するため、一般的には効果的です。したがって、基本的には、そこでやりたいあらゆる種類のキャッシュを扱うことができ、コントローラーはすべて自分のデータを更新するための適切なサービスを見ることができます。私は、コントローラの$ watchのコンビネーションが、サービスに関するデータと私のサービスのメソッドからの約束を返すことで、コントローラの中のものを更新する方法に最も柔軟になることがわかりました。
コントローラの定義の先頭にexampleServiceが挿入されているように、このようなものを私のコントローラに配置します。
angular.module("exampleApp", []).service('exampleService', ["$http", "$q" ,function ($http, $q) {
var service = {
returnedData: [],
dataLoaded:{},
getData = function(forceRefresh)
{
var deferred = $q.defer();
if(!service.dataLoaded.genericData || forceRefresh)
{
$http.get("php/getSomeData.php").success(function(data){
//service.returnedData = data;
//As Mark mentions in the comments below the line above could be replaced by
angular.copy(data, service.returnedData);
//if the intention of the watch is just to update the data
//in which case the watch is unnecessary and data can
//be passed directly from the service to the controller
service.dataLoaded.genericData = true;
deferred.resolve(service.returnedData);
});
}
else
{
deferred.resolve(service.returnedData);
}
return deferred.promise;
},
addSomeData:function(someDataToAdd)
{
$http.post("php/addSomeData.php", someDataToAdd).success(function(data){
service.getData(true);
});
}
};
service.getData();
return service;
}]).controller("ExampleCtrl", ["$scope", "exampleService", function($scope, exampleService){
//$scope.$watch(function() {return exampleService.returnedData}, function(returnedData){
// $scope.myModel.someData = returnedData;
//});
//if not using angular.copy() in service just use watch above
$scope.myModel.someData = exampleService.returnedData;
}]);
はまた、ここで私はまだ再見て、ゆっくりと時間をかけて吸収してるのベストプラクティスの角度チームからの素敵なビデオです。
サービス対コントローラ上の具体的
http://www.youtube.com/watch?v=ZhfUv0spHCY
: http://www.youtube.com/watch?v=ZhfUv0spHCY&t=26m41s
両方をキャッシュすることができます。あなたは、あなたの質問にもう一方を使用する理由を指摘しました。 RESTfulなインターフェースをお持ちの場合は、RESTfulなインターフェースを使用していない場合は、$ httpがより理にかなっていれば、RESTfulインターフェースに共通のボイラー・プレート・コードを書き留めてしまうので、$ resourceを使用する方が良いです。データをいずれかの方法でキャッシュすることができますhttp://pseudobry.com/power-up-%24http.htmlこれがあなたの質問に答えるなら私に教えてください。私はそれを回答として投稿し、コメントを削除します。 – shaunhusain
返答ありがとうございます、私は思っていますが、$ HTTPとngResourceの利点/利点が、おそらくRESTful APIからオブジェクトを返すが、 GET以外のインタラクションはありません。たぶん私はそれに多くを読んでいる、ちょうど議論されたユースケースを見つけることができなかった、実装のみ。 $ http要求がサービスにラップされるべきだが、ベストプラクティスが見つからないとの議論もある。 – adamK
$ httpリクエストをサービスに入れるのは、複数の場所からのデータへのアクセスを必要とし、サービスがシングルトンとして機能するので、一般的にうまく機能すると思います。基本的には、すべて自分のデータを更新するための適切なサービスを見るだけです。私は、コントローラの$ watchのコンビネーションが、サービスに関するデータと私のサービスのメソッドからの約束を返すことで、コントローラの中のものを更新する方法に最も柔軟になることがわかりました。 – shaunhusain