2012-04-06 11 views
7

मेरे पास निम्न कार्य है जिसे मैं किसी सेवा में कनवर्ट करना चाहता हूं।सेवा के लिए AngularJS फ़ंक्शन को कनवर्ट करें

मैं एंगुलरजेएस सेवा में $ संसाधन कॉल निकालने के लिए कैसे जाउंगा, और मैं इस सेवा को कैसे कॉल करूं?

self.select = function (email) { 
    var Player = $resource('/player/get',{email:email}); 
    var player = Player.get(function() { 
     self.selectedPlayer.email = player.email; 
     self.selectedPlayer.fuel = player.fuel; 
     self.selectedPlayer.cargo = player.cargo; 
     self.selectedPlayer.food = player.food; 
    }); 
} 

धन्यवाद!

उत्तर

18

मुझे संदेह है कि आप संस्करण 0.9.1 9 से काम कर रहे हैं। मैं सबसे पहले सुझाव देता हूं कि आप संस्करण 1.0rc4 पर जाएं। संस्करण 1.0 लाइव होने के करीब है और स्थिर है लेकिन संस्करण 0.9 पर इसके कई ब्रेकिंग बदलाव हैं। अधिक जानकारी के लिए आप Angular documentation देख सकते हैं।

v1.0 में आप सब कुछ मॉड्यूल में लपेटें: नियंत्रक, सेवाएं, निर्देश आदि। इसलिए जैसे एक मॉड्यूल बनाएँ:

var module = angular.module('ModuleName', ['ngResource']); 

संस्करण 1.0 संसाधन सेवा में अपने ही वर्ग में बाहर शामिल होती है, तो आप किसी निर्भरता के रूप में यह देना है। आपको अपने ऐप में resource js फ़ाइल भी शामिल करनी होगी।

अब सेवा बनाने के लिए आप बस मॉड्यूल एपीआई का उपयोग कर सकते हैं। इस मामले में:

module.factory('Player', ['$resource', function($resource) { 
    return $resource('/player/get');}]); 

यहां ध्यान दें कि $ संसाधन पर निर्भरता कोणीय द्वारा इंजेक्शन दी जाती है।

निजी तौर पर मैं अपने सेवा के अंदर गुंजाइश के साथ गड़बड़ करने के लिए पसंद नहीं है इसलिए मैं अपने नियंत्रक के अंदर निम्नलिखित होंगे:

v1.0 में गुंजाइश भी नियंत्रक में इंजेक्ट किया जाता
module.controller('MyController', ['$scope', 'Player', function($scope, Player) { 
    $scope.select = function(email) { 
     console.log("selecting"); 
     Player.get({ 
     email: email 
     }, function(player) { 
      $scope.selectedPlayer = player; 
     }); 
    }; 
}]);​ 

सूचना कि इतने स्वयं का उपयोग नहीं कर रहे हैं। इसके अलावा मैंने यह मानने की स्वतंत्रता ली कि चयनित प्लेयर में केवल खिलाड़ी से फ़ील्ड होंगे, इसलिए मैंने अभी चयनित खिलाड़ी के शीर्ष पर सीधे खिलाड़ी लिखा है। आप इसे क्षेत्र द्वारा मैन्युअल रूप से फ़ील्ड भी कर सकते हैं या दो ऑब्जेक्ट्स को मर्ज करने के लिए angular.extend($scope.selectedPlayer, player); का उपयोग कर सकते हैं।

यहां एक पहेली है: http://jsfiddle.net/DukvU/

11
angular.module('myModule', []). 
    factory('Player', function($resource) { 
    return $resource('/player/get',{email:email}); 
    }); 

function MyController($scope, Player) { 
    $scope.select = function(email) { 
    Player.get(....); 
    } 
} 
संबंधित मुद्दे