2013-09-30 3 views
4

그래서 내가로 정의 된 자원은 다음 한) (저장 POST 응답에서 고유 한 ID를 가져 오지 :

angular.module('questionService', ['ngResource']) 
.factory('QuestionService', function($http, $resource) { 
    var QuestionService = $resource('/api/questions/:key', {}, { 
     query: { 
      method:'GET', 
      isArray:true, 
     }, 
     save: { 
      method: 'POST', 

     } 
    }); 

    return QuestionService 
}); 

을 그리고 나중에 내가 어떤 형태의 입력을 받아 다음을 수행

var newQ = { 
    txt: $scope.addTxt 
}; 

QuestionService.save(newQ) 

서버는 POST 요청에 응답하여 객체에 대한 JSON을 다시 발행하고 새로운 고유 ID로 위치 헤더를 설정합니다. 문제는 Angular가 JSON 또는 위치 헤더를 객체에 반환하는 저장 작업이 아니며 향후 작업을 위해 서버에서 ID로 설정되지 않는다는 것입니다. 나는 다음과 같은 여러 가지를 시도했다.

transformResponse: function(data, headersGetter) { 
    locationHeader = headersGetter().location; 
    key = locationHeader.split('/').slice(-1)[0]; 
    data.key = key; 
    return data; 
} 

그러나 반환 된 데이터 항목은 사용되지 않는 것처럼 보인다. 내가 놓친 게 있니? 이것은 REST API와 상호 작용하는 꽤 일반적인 사용 사례처럼 보입니다.

감사합니다.

답변

3

은 수동으로 newQ에 새로운 ID를 할당 성공 핸들러가 필요 :

QuestionService.save(newQ, function(data) { 
    newQ.id = data.id; 
}); 

을하지만 같은를 달성하기 위해 더 나은이있다.

newQ.$save(); 

지금 newQ 서버에 의해 반환 된 새 ID를 가져야한다 :

var newQ = new QuestionService({text: $scope.addTxt}); 

그런 다음, $save()newQ의 전화 : 당신의 QuestionService는 자원 클래스 객체이기 때문에, 당신은 당신이 같은 newQ 인스턴스화 할 수 있습니다.

+0

감사합니다. 이 구문을 사용할 수 있다는 것을 깨닫지 못했습니다. – grivescorbett

+0

$ save가 응답으로 리소스를 덮어 쓰지 않도록하는 방법이 있습니까? 예를 들어 사용자 $ scope.user가 있습니다. $ scope.user. $ save()를 호출하고 서버가 "Success"로 응답하면 ng-resource는 $ scope.user를 "Success"라는 단어로 설정합니다. 그걸 막을 방법이 있습니까? 내 백엔드는 성공한 콜백에서 수동으로 업데이트하고자하는 새 사용자의 ID를 반환합니다. $ scope.user.id = response.id, 전체 사용자 객체를 다시 전달하는 추가 오버 헤드가 없습니다. 응답에서. – parliament

0

WebApi2가 실행중인 Asp.Net 서버가 있는데 콘텐츠를 반환하기 위해 Ok (숫자)를 사용하고 결과로 '6'을 반환합니다. 일단 그것이 돌아 오면, 각도는 약속과 상태, 프로토 타입과 깊은 반복 계층 구조를 포함하는 객체를 보여 주지만 값은없고 '6'이 없습니다. 그래서 데이터가 어디에 있는지, 데이터가 변환을 정의하는 곳을 보러갔습니다. 데이터는 볼 수 있지만 데이터는 없습니다. 그러나 012son은 아닙니다 ...

나중에 다음과 같이 변경합니다. 나는 'returnValue'라는 하위 속성을 가진 성공 함수에 obj를 가지고 있는데,이 객체는 내 값을 유지한다.

transformResponse: function(data, header){ 
    var obj={}; 
    obj.returnValue=angular.fromJson(data); 
    return obj; 
}, 
관련 문제