각 $http vs 서비스 vs ng Resource
서버에 대한 단순한 $http 요청을 사용하거나 해당 요청을 서비스로 래핑하는 것과 ngResource 개체를 사용하는 것의 장점과 단점을 이해하고 싶습니다(RESTful 리소스에 관한 명백한 것 이외).
제가 이해하기로는 $http 요청은 낮은 수준이지만 매우 유연하고 설정이 가능한 반면 RESTful API를 다룰 때 ngResource 객체는 매우 간단한 통신을 제공합니다.
제가 문의하는 것은 매우 간단한 시나리오입니다.예를 들어 서버로부터의 데이터 취득(객체 배열의 GET 요구라고 합니다)은 $http 요구를 서비스로 래핑(항상 그래야 합니까?)하거나 ngResource 개체를 사용하는 것보다 단순하게 사용하는 것이 효율적입니다.
어떤 의견이라도 주시면 감사하겠습니다.예를 들어 $http 응답을 캐시할 수 있습니다.ngResource는 캐시할 수 있습니까?감사해요.
코멘트에서 기본적으로 여러분이 알고 싶어하는 것을 파악했기 때문에, 이것을 답변으로 정리하기로 결정했습니다.
$http 또는 $resources를 사용하여 결과를 캐시할 수 있습니다. 질문에서 하나를 다른 하나보다 더 사용해야 하는 이유를 지적했습니다.RESTful 인터페이스를 사용하는 경우 $resource를 사용하는 것이 좋습니다.RESTful 인터페이스에 공통되는 보일러 플레이트 코드를 적게 쓸 수 있기 때문입니다.RESTful 서비스를 사용하지 않는 경우 $http가 더 적합합니다.어느 쪽이든 데이터를 캐시할 수 있습니다.http://www.pseudobry.com/power-up-http-with-caching/
$http 또는 $resource 요청을 서비스에 넣는 것이 일반적으로 더 효과적이라고 생각합니다. 왜냐하면 여러 위치에서 데이터에 액세스하고 서비스가 싱글톤 역할을 하기 때문입니다.따라서 기본적으로 원하는 모든 종류의 캐슁을 처리할 수 있으며 컨트롤러는 모두 적절한 서비스를 감시하여 자체 데이터를 업데이트할 수 있습니다.컨트롤러의 $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;
}]);
또, 베스트 프랙티스에 관한 Angular 팀의 훌륭한 비디오도 있습니다.지금도 다시 보고 있고, 시간이 지남에 따라 서서히 즐기고 있습니다.
http://www.youtube.com/watch?v=ZhfUv0spHCY
특히 서비스와 컨트롤러: http://www.youtube.com/watch?v=ZhfUv0spHCY&t=26m41s
캐시 가능 여부보다 훨씬 더 의미 있는 차이가 하나 있습니다.
리소스를 사용하면 서비스 또는 반환된 데이터에 $watch를 설정할 필요가 없어집니다.당신은 약속을 가지고 일하지 않아도 될 것입니다.본질적으로, 그것은 그의 예에서 숀후신이 하고 있는 어떤 것도 할 필요가 없다.
리소스 메서드를 호출하면 해당 리소스와 관련된 구조의 빈 인스턴스가 반환되므로 직접 바인딩할 수 있습니다.이 동일한 인스턴스는 나중에 데이터로 채워집니다.인스턴스에 바인딩되어 있기 때문에 인스턴스가 채워지면 디스플레이가 자동으로 업데이트됩니다.
리소스는 또한 제공하는 서비스의 요청 및 응답을 캡슐화된 방식으로 변환하여 리소스 클라이언트에 모두 표시되지 않게 할 수도 있습니다.
자원은 스테로이드제의 서비스와 같다.
언급URL : https://stackoverflow.com/questions/17667455/angular-http-vs-service-vs-ngresource
'programing' 카테고리의 다른 글
QJson Document, QJson Object, QJson Array를 사용한QT 해석 (0) | 2023.03.05 |
---|---|
지시적 정의의 트랜슬루드 옵션을 이해하고 있습니까? (0) | 2023.03.05 |
폼 데이터와 요청 페이로드의 차이점은 무엇입니까? (0) | 2023.03.05 |
Angular를 테스트하려면 어떻게 해야 합니까?콘솔에서 JS 서비스를 제공합니까? (0) | 2023.03.05 |
사용자가 폼을 제출할 때 언로드 전 액션을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.03.05 |