2012-11-13 19 views
7

मैं एक AngularJS $ संसाधन इस तरह परिभाषित किया गया है। तो जब मैं Menus पर एक GET कर मैं इस वापस पाने:

<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 दस्तावेज़ को जावास्क्रिप्ट डेटा संरचना में प्राप्त करने में सक्षम हैं, और आप बस यह सुनिश्चित नहीं कर रहे हैं कि इसे कैसे संशोधित किया जाए? क्या आप डेटा संरचना को प्राप्त करने में सक्षम नहीं हैं? अब तक आपके पास कौन सा कोड है, और परिणाम क्या हैं? –

+0

मैं आईडी निकालने के लिए जेएस ऑब्जेक्ट में हेरफेर करना शुरू नहीं करना चाहता हूं। मैं नहीं चाहता कि आईडी मेरे कोड के चारों ओर तैर रही हो। मैं 'DELETE' अनुरोध भेजने के लिए स्वयं संदर्भ आइटम' href' का उपयोग करना चाहता हूं। मैं समर्थन करता हूं कि मैं सोच रहा हूं कि प्रत्येक आइटम 'संसाधन' ऑब्जेक्ट का एक प्रकार है या नहीं? या वह कोणीय से बहुत ज्यादा पूछ रहा है? – Greg

+0

आह, जब आप "हटाएं" कहते हैं, तो आपका मतलब HTTP पर सर्वर पर संसाधन को हटा देना है। जहां तक ​​मुझे पता है, एंगुलर एक्सएमएल को समझ नहीं पा रहा है - एक बार वादे आपके ऐप में हल हो जाने के बाद 'मेनू' कहता है (कहें, 'console.log' के माध्यम से)? –

उत्तर

11

यह मानते हुए कि आप XML से जावास्क्रिप्ट वस्तुओं का एक कोणीय से प्रबंधित सरणी के लिए चले गए हैं, तो आप अपने वस्तुओं रेंडर करने के लिए इस का उपयोग कर सकते हैं:

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

और अपने नियंत्रक में आप यह कर सकते हैं:

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 
    }); 
    } 
} 

देखो, यूआरएल के क्लाइंट-साइड निर्माण नहीं! :)

अद्यतन:, जोड़ आदेश में एक बग तय splice(index, index) था, लेकिन splice(index, 1) होना चाहिए।

+0

ऐसा लगता है कि जब आप संसाधन के माध्यम से सरणी प्राप्त करते हैं, जैसे 'var Menus = $ resource (' http://cafe.com/api/menus '); ' इसका मतलब यह नहीं है कि सरणी में प्रत्येक आइटम एक संसाधन है। इसलिए $ http इस उदाहरण में जाने का तरीका है ... – Greg

+1

@ ग्रेग - नहीं, बस सेट हैअरे: दस्तावेज की तरह सच है कि आप पहले ही प्राप्त कर चुके हैं: http://docs.angularjs.org/api/ngResource.$resource –

+0

हाँ, सहमत हो गया, उस समय नहीं देखा। – Greg

2

यदि आपकी आरईएसटी सेवा जेएसओएन को कोणीय में लौटाती है और JSON में लौटाए गए डेटा में मेनू आईडी शामिल होती है।

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

यदि मैं इसकी सहायता कर सकता हूं तो मैं आईडी को पास नहीं करना चाहता हूं। संसाधन दिए गए एचआरईएफ पर आता है। तो मैं बस इतना करना चाहता हूं कि दिए गए यूआरएल को HTTP डिलीट अनुरोध भेजना है। हो सकता है कि मुझे मेनू के माध्यम से लूप करना चाहिए और कस्टम मेनू ऑब्जेक्ट को तुरंत चालू करना चाहिए और ऑब्जेक्ट पर किसी प्रॉपर्टी पर एचआरईएफ असाइन करना है .... – Greg

+0

यदि आप नहीं करते हैं तो आप केवल $ http सेवा का उपयोग कर सकते हैं यदि आप नहीं करते हैं $ संसाधन प्रणाली – Guillaume86

+1

का उपयोग करना चाहते हैं, लेकिन मैं जानना चाहता हूं कि क्या मैं मेन्यू सरणी में संसाधन ऑब्जेक्ट की तरह प्रत्येक "मेनू" का इलाज कर सकता हूं। तो var मेनू = menu.query(); फिर मेनू [0]। $ हटाएं(); क्या यह संभव है? – Greg