2012-06-28 8 views
8

कोणीय मेलिंग सूची में पोस्ट करने के बजाय, मुझे लगता है कि यह जावास्क्रिप्ट प्रश्न अधिक हो सकता है। आशा है कि एसओ समुदाय भी तेज प्रतिक्रिया दे सकता है।AngularJS - एक सेवा ऑब्जेक्ट बनाना

मैं एक सेवा में डेटा को समाहित करने और नियंत्रक में इंजेक्शन लगाने की कोशिश कर रहा हूं।

angular.module('myApp.services', ['ngResource']). 
    factory('Player', function($resource){ 
     var Player ; 
     Player = { 
      resource: $resource('/api/Player/:_id', {}) 
     }; 
     return Player 
}); 


function PlayerDetailCtrl(Player, $routeParams, $scope) { 
    $scope.resource = Player.resource.get({_id:$routeParams._id}); 
} 
PlayerDetailCtrl.$inject = ['Player', '$routeParams', '$scope']; 

यह एक अपवाद

TypeError: Object #<Object> has no method 'query' 

$scope.resource = Player.Player.resource.get({_id:$routeParams._id}); भी त्रुटि फेंकता

TypeError: Object #<Object> has no method 'query' 

नीचे काम करता है फेंकता है।

angular.module('myApp.services', ['ngResource']). 
    factory('Player', function($resource){ 
     var Player ; 
     Player= $resource('/api/Player/:_id', {}) 
     return Player 
}); 


function PlayerDetailCtrl(Player, $routeParams, $scope) { 
    $scope.resource = Player.Player.get({_id:$routeParams._id}); 
} 
PlayerDetailCtrl.$inject = ['Player', '$routeParams', '$scope']; 

मेरा इरादा Player लिए और अधिक डेटा और विधि जोड़ना है। तो मैं पहला (ऑब्जेक्ट फॉर्म) कैसे काम कर सकता हूं!

+0

दिलचस्प। क्या प्लेयर है: $ संसाधन ('/ api/प्लेयर /: _ आईडी', {}) 'वैध जावास्क्रिप्ट? –

+0

काफी खेद है, इस बीच संपादन कर रहा था। यह काम करता है अगर मैं एक चर को आवंटित करता हूं और इसके माध्यम से उपयोग करता हूं, लेकिन यदि किसी ऑब्जेक्ट के अंदर असाइन नहीं किया जाता है। धन्यवाद – bsr

+0

@ ग्रेसशो 'प्लेयर: $ संसाधन ('/ एपीआई/प्लेयर /: _ आईडी', {}) 'हाँ अगर यह सदस्य परिभाषा का हिस्सा है ... – jcolebrand

उत्तर

6

आपको फ़ैक्टरी पैदा कर रहे भिन्न होते हैं, ऐसा करने का असामान्य तरीका है। आप एक उदाहरण वापस नहीं करना चाहते हैं। कोणीय आपको अपने नियंत्रक में एक उदाहरण देगा।

factory('Player', function ($resource) { 
    return $resource('/api/Player/:_id', { }); 
}) 

यहाँ एक सेवा मैं एक CakePHP बाकी सेवा के साथ बातचीत करने के लिए लिखा है। मैंने इसे थोड़ी देर पहले लिखा था, इसलिए इसे एक उदाहरण के रूप में लें, मैं रिफैक्टर कर सकता हूं।

factory('CommentSvc', function ($resource) { 
    return $resource('/cakephp/demo_comments/:action/:id/:page/:limit:format', { id:'@id', 'page' : '@page', 'limit': '@limit' }, { 
     'initialize' : { method: 'GET', params: { action : 'initialize', format: '.json' }, isArray : true }, 
     'save': { method: 'POST', params: { action: 'create', format: '.json' } }, 
     'query' : { method: 'GET', params: { action : 'read', format: '.json' } , isArray : true }, 
     'update': { method: 'PUT', params: { action: 'update', format: '.json' } }, 
    }); 

})।

+1

दान, मैं आपके नाम को कोणीय मेलिंग सूची से पहचानता हूं :-)। मैं सेवा में कुछ कस्टम तरीकों को जोड़ना चाहता था। मैं एक और बना सकता हूं और साथ ही इंजेक्ट कर सकता हूं, लेकिन यह सोच रहा था कि क्या मैं संसाधन ऑब्जेक्ट को वापस करने के लिए सेवा बनाने से बच सकता हूं, लेकिन अधिक संबंधित कार्यक्षमता को समाहित करता हूं। आपको क्या लगता है? – bsr

+0

नहीं यकीन है कि मैं समझता हूँ, आप एक संसाधन वस्तु के लिए आप चाहते हैं किसी भी कस्टम विधियां जोड़ सकते हैं डिफ़ॉल्ट लोगों को अपनी आवश्यकताओं –

+0

उम को पूरा नहीं करते हैं। मैं इस कारखाने/सेवा में गैर संसाधन समारोह जोड़ रहा था। उदाहरण के लिए, प्रारंभ में अनुरोध प्रतिक्रिया प्राप्त करना, और इसे नियंत्रकों में $ दायरे में सेट करना। एक विरोधी पैटर्न हो सकता है, लेकिन मैं अभी भी सीख रहा हूँ। – bsr

0

ऐसा लगता है कि जेएस प्लेयर के लिए कुछ कोड के बारे में शिकायत कर रहा है। मुझे लगता है कि Player= $resource('/api/Player/:_id', {})Player बनाता है एक संपत्ति कॉल query है। जिस फ़ॉर्म को आपने बदल दिया है वह Player उस संपत्ति को नहीं बनाता है।

+0

मैं अभी भी जेएस सीख रहा हूं, इसलिए यह पता लगाने की कोशिश क्यों कर रहा हूं। किसी वस्तु में लपेटने पर यह अलग कैसे होता है? – bsr

+0

यदि आप '$ संसाधन' फ़ंक्शन देखते हैं, तो इसमें वापसी ऑब्जेक्ट की संपत्ति के रूप में 'query' हो सकती है। लेकिन आप '{ संसाधन: $ संसाधन ('/ api/player /: _ id', {}) } 'में बदल गए हैं, जिनके पास' query' –

+0

नामक संपत्ति नहीं है, इसलिए यह श्रृंखला को श्रृंखलाबद्ध करने की अनुमति नहीं देता है तरीकों? – bsr

0

ठीक है, कुछ प्रयास करने के बाद निम्नलिखित काम करता है।

Player = { 
      resource: function() { 
        return $resource('/api/Player/:_id', {}) 
      } 
     }; 

इसमें मैं स्पष्ट रूप से संसाधन ऑब्जेक्ट लौटाता हूं। लेकिन व्याख्या नहीं कर सकते कि यह कैसे से

resource: $resource('/api/Player/:_id', {})