2015-01-16 1 views
6

저는 AngularJS $ 리소스를 사용하여 일관되고 좋은 예제의 put 작업을 찾기 위해 애써 왔습니다. 업데이트하고 싶지만 보이지 않는 예가 여기에 있습니다. AngularJS PUT on voting application to REST Service 핵심 부분에서 양식 제출 또는 게시판 작업을 수행하는 데 가장 적합한 방법/일반적인 방법을 이해해야합니다. 위 게시물에 언급 된 투표 신청서. 누구든지 흉내 내기를 보여주는 좋은 모범이 있습니까?

+1

은 당신이 찾고있는 것을 명확하지 : 사용자 정의 PUT 요청을 만드는 방법

. 객체가 새로운 (id가없는) 경우 저장은 POST가 될 것이고, 새로운 것이 아니라면 PUT이 될 것이다. 어떤 부분에 대한 설명을 찾고 있습니까? – charlietfl

+0

그것이 내가 찾는 정보의 유형입니다. $ 리소스에 대한 Angular 문서는 항목을 새 데이터로 업데이트하는 방법에 대해 다소 명확하지 않습니다. 나는 put 작업을 지원하는 서비스와 컨트롤러를 어떻게 구성하는지에 대한 예제를 찾고있다. 지금까지 필자가 알고있는 점은 컨트롤러에 $ update를 사용하고 서비스를 패치 할 때 (예 : 'update': {method : 'PATCH'}) 명시 적으로해야한다는 것입니다. $ 업데이트가 필요없고 초기 데이터를 게시하는 방법과 비슷한 $ 저장을 사용해야한다고 말하는 것입니까? – Kode

답변

14

데이터 저장소에 새 엔터티를 만들려면 POST/저장을 사용하고 싶습니다. 데이터 저장소의 기존 엔티티와 관련된 데이터를 업데이트하는 경우 PUT/업데이트를 사용하려고합니다. 패치는 대개 엔티티 데이터의 하위 집합을 업데이트하려는 경우에만 예약됩니다. 하이퍼 텍스트 전송 프로토콜을 연장하는 RFC

여러 응용 프로그램에서

봐는 (HTTP) 부분 자원 수정을 할 수있는 기능이 필요합니다. 기존 HTTP PUT 방법을 사용하면 문서를 완전히 대체 할 수 있습니다. 이 제안은 새로운 HTTP 메소드 인 PATCH를 추가하여 기존 HTTP 리소스를 수정합니다.

ID를 PUT 및 PATCH 작업과 함께 제공해야합니다. POST 작업을 제공하지 않습니다.

각도 모양을로드하면 일반적으로 두 가지 방법 중 하나가 수행됩니다. 새로운 엔티티를 생성 할 때 폼이로드되면 id가 없습니다. 우리는 이것을 컨트롤러에서 알고 resource.save를 호출 할 것입니다. 양식을 채우기 위해 엔드 포인트에서 데이터를 가져 오는 데 사용되는 ID를 사용하여 양식을로드하는 제어기를 제공하는 경우 엔 엔티티의 양에 따라 resource.update 또는 resource.patch 조작을 수행하는 데 사용할 수있는 ID가 있습니다. 우리는 업데이트 중입니다.

다음은 업데이트 및 저장 작업을 모두 처리하는 save 함수의 예입니다. 여기서는 리소스 호출을하기 전에 경로를 통해 ID가 제공되었는지 확인합니다.

angular.module('appModule').controller('ExampleCtrl', 
['$scope', '$routeParams', 
function($scope, $routeParams) { 

    $scope.saveForm = function() { 

     //Do input validation before you make a resource call 

     if ($routeParams.id) { 
      //call resource update since we have an id 
     } 
     else { 
      //call resource save since we don't have an id 
     } 
    }; 
}]); 

다음은 AngularJS와 문서에서 예제 :

var app = angular.module('app', ['ngResource', 'ngRoute']); 

// Some APIs expect a PUT request in the format URL/object/ID 
// Here we are creating an 'update' method 
app.factory('Notes', ['$resource', function($resource) { 
return $resource('/notes/:id', null, 
{ 
    'update': { method:'PUT' } 
}); 
}]); 

// In our controller we get the ID from the URL using ngRoute and $routeParams 
// We pass in $routeParams and our Notes factory along with $scope 
app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes', 
           function($scope, $routeParams, Notes) { 
// First get a note object from the factory 
var note = Notes.get({ id:$routeParams.id }); 
$id = note.id; 

// Now call update passing in the ID first then the object you are updating 
Notes.update({ id:$id }, note); 

// This will PUT /notes/ID with the note object in the request payload 
}]); 
+0

PUT을 사용하기 위해 기본 $ update() 함수를 설정할 수는 없으므로'object. $ save()'를 실행할 수 있고 Angular는 자동으로'$ update' 또는 $ create를 실행할 것인지 결정합니다 'ID가 있는지 여부에 따라 다르지만 POST를 사용합니다. – darkbluesun

관련 문제