5

데이터를 표시하라는 지시문을 만들었습니다. ng-repeat에 포함시켜 모델이 연결되어 있는지 확인할 수 있습니다. 클릭하여 페이지를 반환하면 데이터가 이전에 변경된 내용과 함께 다시 표시됩니다. ngResources를 사용하여 API에서 데이터를로드했습니다. 지금까지는 그렇게 좋았습니다. 예상대로 작동합니다.저장하면 항목이 사라집니다.

다음은 중단되는 부분입니다. 지시문에서 API에 데이터를 저장하면 해당 항목이 페이지에서 사라집니다 (더 구체적으로 해당 입력란이 비어 있음). 나머지 항목은 이전과 동일하게 유지됩니다. 저장된 파일 만 변경됩니다.

.directive('action', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      data:'=model' 
     }, 
     templateUrl: 'modules/actions/view.tpl.html', 
     replace: true, 
     link: function(scope, element, attr) { 
      scope.save = function() { 
       console.log(" data to save:" + JSON.stringify(scope.data)); 
       scope.data.$save(); 
      } 
     } 
    }; 
}) 

지향성과 연관된 HTML을 포함한다 :

여기
<p><input type="text" ng-model="data.assignee" ng-change="save()"> 

가 지정 사용 방법 : 여기

<div ng-repeat="item in data"> 
    <action model="item" /> 
</div> 

추가 컨텍스트를 나타내는 fiddle가 여기

지시어의 . 가짜 데이터로 작업하는 기본 지시문을 볼 수 있습니다. API 호출의 코드는 주석 처리되어 있습니다.

이 경우에도 scope.data.$save(); 행의 주석 처리를 해제하면 문제가 발생합니다. ng-repeat에 표시된 항목이 자신을 저장하려고하면 표시된 항목 목록에서 사라지고 공백 필드가있는 항목으로 바뀝니다. 전체 애플리케이션을 다시로드하면 API 저장이 성공하고 아이템이 올바르게 표시됩니다.

내가 의심하는 것은 저장 호출이 올바른 항목에서 작동하지만 대체로 프로토 타입 상속으로 인해 새 항목, 빈 항목으로 변경된 항목을 대체한다는 것입니다. 그런 다음 저장하면 상위 범위에 대한 업데이트가 발생하여 목록이 다시 그려지고 새 비어있는 항목이 표시됩니다.

어떤 일이 일어나고 있는지, 어떻게 해결할 수 있습니까?

답변

4

$save() 명령에 대한 HTTP 응답이 빈 데이터를 반환하고있는 것으로 나타났습니다.

이것은 $resource의 작동 방식입니다. $save()으로 전화하면 (기본적으로) HTTP POST로 REST 서비스를 호출합니다. 응답은 자원의 서버 상태가 될 것으로 예상됩니다. 그런 다음 결과가 개체에 복사됩니다. 이 경우, 나는 당신의 REST 서비스가 빈 객체를 반환하고 있다고 생각하고있다.

즉, {name: 'foo'} 본문이있는 POST를 보내면 서버의 응답이 {id: 44, name: 'foo', extraInfoServerCreated: 'bar'}과 같을 것으로 예상됩니다.

+1

네가 맞아. 서버가 저장된 데이터를 반환하면 문제가 완전히 해결됩니다. 감사! – CodeGuy2001

+0

또는 빈 응답을 반환하면 응답 데이터 대신 원래 항목이 사용됩니다. – cyberwombat

+0

@ Yashua 정말입니까? Angular'$ resource'가 REST 서비스에서 반환 한 값으로 데이터를 대체한다고 생각했습니다. 그래서 빈 상태로 돌아 가면 모델이 지워집니다. –

관련 문제