2012-11-13 5 views
7

나는 다음과 같이 정의 된 AngularJS와의 $ 자원을 가지고있다. 나는 메뉴 2를 삭제하는 방법,

<cafe> 
    <collection href="http://cafe.com/api/menus" type="menus"> 
    <template> 
     <data name="Name" prompt="Menu name" /> 
    </template> 
    <items> 
     <item href="http://cafe.com/api/menus/1"> 
     <link href="http://cafe.com/api/menus/1/ingredients" rel="ingredients" /> 
     <data name="Name" prompt="Menu name">Morning</data> 
     </item> 
     <item href="http://cafe.com/api/menus/2"> 
     <link href="http://cafe.com/api/menus/2/ingredients" rel="ingredients" /> 
     <data name="Name" prompt="Menu name">Happy Hour</data> 
     </item> 
    </items> 
    </collection> 
</cafe> 

질문입니다 : 내가 MenusGET을 수행 할 때 그래서 나는이 다시 얻을? (자체 하이퍼 미디어 링크가있는 경우 : http://cafe.com/api/menus/2)

+0

어디서 붙어 있습니까? XML 문서를 JavaScript 데이터 구조로 가져올 수 있습니까? 수정 방법은 확실하지 않습니다. 데이터 구조를 생성 할 수 없습니까? 지금까지 어떤 코드가 있었으며 결과는 무엇입니까? –

+0

나는 ID를 추출하기 위해 JS 객체를 조작하기 시작하지 않을 것이다. 내 코드 주위에 ID가 떠 다니는 것을 원하지 않습니다. 차라리 자체 참조 항목'href'를 사용하여 DELETE 요청을 보냅니다. 나는 각 항목이'resource' 객체 유형인지 궁금합니다. 또는 Angular에서 너무 많이 묻는 것입니까? – Greg

+0

아, "삭제"라고 말하면 HTTP를 통해 서버의 리소스를 삭제하는 것입니다. 필자가 알고있는 한 Angular는 XML을 이해하지 못합니다. 일단 앱에서 약속이 해결되면'console.log'를 통해'Menus'가 무엇입니까? –

답변

11

자바 스크립트 객체의 각도 관리 배열에 XML에서 사라했다고 가정하면, 당신은 당신의 객체를 렌더링하기 위해 이것을 사용할 수 있습니다 :

function ListCtrl($scope, $http, CafeService) { 
    CafeService.list(function (cafes) { 
    $scope.cafes = cafes; 
    }); 

    $scope.deleteCafe = function (index, cafe) { 
    $http.delete(cafe.self).then(function() { 
     $scope.cafes.splice(index, 1); 
    }, function() { 
     // handle error here 
    }); 
    } 
} 

클라이언트 측 URL 만들기가 필요 없습니다. :)

업데이트 :는, 스플 라이스 명령의 버그를 수정 splice(index, index)했지만, splice(index, 1)을해야합니다.

+0

리소스를 통해 배열을 얻을 때, 'var Menus = $ resource ('http://cafe.com/api/menus '); 배열의 각 항목이 리소스라는 것을 의미하지는 않습니다. 따라서 $ http는이 인스턴스로 이동하는 방법입니다 ... – Greg

+1

@Greg - 아니요, 그냥 isArray : 문서가 GET에 이미 표시되어있는 것처럼 설정합니다. http://docs.angularjs.org/api/ngResource.$resource –

+0

그래, 합의, 그 당시에 보지 못했어요. – Greg

2

REST 서비스가 JSON을 각도로 반환하고 JSON이 반환 된 데이터에 메뉴 ID를 포함하는 경우.

<tr ng-repeat="cafe in cafes"> 
    <td>{{cafe.name}}</td> 
    <td> 
     <button class="btn" ng-click="deleteCafe($index, cafe)">Delete</button> 
    </td> 
</tr> 

및 컨트롤러에서이 작업을 수행 할 수 있습니다

var Menu = $resource('http://cafe.com/api/menus/:id', { id: '@id' }); // replace @id with @<the id field in your json object> 

// Delete menu 2 
Menu.delete({id: 2}, function(){ // Success callback 
    // Get all menus, 
    var menus = Menu.query(function() { // Success callback 
    // alternative delete syntax: 
    var lastMenu = menus.pop(); 
    lastMenu.$delete(); 
    }); 
}); 
+0

나는 그것을 도울 수 있으면 ID를 전달하고 싶지 않습니다. 자원은 주어진 HREF에 속합니다. 그래서 내가 원하는 것은 주어진 URL에 HTTP DELETE 요청을 보내는 것이다. 어쩌면 내가 메뉴를 반복하고 사용자 지정 메뉴 개체를 인스턴스화하고 개체의 속성에 HREF를 할당해야합니다 .... – Greg

+0

당신은 href에 대한 DELETE 요청을 만들기 위해 일반 $ http 서비스를 사용할 수 있습니다. $ resource 시스템을 사용하고 싶습니다. – Guillaume86

+1

사실입니다 만, 메뉴 객체의 각 "Menu"를 리소스 객체처럼 취급 할 수 있는지 알고 싶습니다. 그래서 var menus = Menu.query(); 그런 다음 menus [0]. $ delete(); 그게 가능하니? – Greg