2012-11-13 5 views
7

は、私はこのように定義されたAngularJSの$リソースを持っています。私はMenusGETを行うときに、私はこれを取り戻す:

<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> 

質問は、どのように私はメニュー2を削除するか、のですか? (http://cafe.com/api/menus/2

+0

どこにいらっしゃいますか? XML文書をJavaScriptのデータ構造に変換できますか?それを変更する方法がわかりません。作成されたデータ構造を取得できませんか?これまでどんなコードがありましたか?結果は何ですか? –

+0

私はむしろIDを抽出するためにJSオブジェクトを操作し始めません。私は自分のコードの周りにIDを浮かべたくありません。むしろ自己参照アイテム 'href'を使って' DELETE'リクエストを送るのです。私は各アイテムが 'resource'オブジェクトの型かどうか疑問に思いますか?それともAngularからあまりにも多くを求めているのでしょうか? – Greg

+0

ああ、「削除」と言うと、HTTP経由でサーバー上のリソースを削除することを意味します。私が知っている限り、AngularはXMLを理解していません。あなたのアプリで約束が解決されたら 'Menus'(' console.log'を介して)とは何ですか? –

答えて

11

あなたはJavaScriptオブジェクトの角度が管理する配列に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コマンドのバグを修正しました。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

通常の$ httpサービスを使用して、hrefでDELETEリクエストを作成できます$ resourceシステムを使用したい – Guillaume86

+1

本当ですが、リソースオブジェクトのようなメニュー配列の各 "メニュー"を扱えるかどうかを知りたいと思います。だからvar menus = Menu.query();その後、メニュー[0]。$ delete();それは可能ですか? – Greg

関連する問題