2013-03-17 9 views
12

मैं $ संसाधन उपयोग करने के लिए एक स्थिर json फ़ाइल से डेटा प्राप्त करने की कोशिश कर रहा हूँ और यहाँ आने के लिए कोड का टुकड़ा है:

angular.module('app.services', ['ngResource']). 
    factory('profilelist',function($resource){ 
    return $resource('services/profiles/profilelist.json',{},{ 
     query:{method:'GET'} 
    }); 
}); 

नियंत्रक में

function ProfileCtrl($scope,profilelist) { 
$scope.items = []; 
$scope.profileslist = profilelist.query(); 
for (var i=0;i<=$scope.profileslist.length;i++){ 
    if($scope.profileslist[i] && $scope.profileslist[i].profileid){ 
     var temp_profile = $scope.profileslist[i].profileid; 
    } 
    $scope.items.push(temp_profile); 

} 

लेकिन अब, मुझे एक त्रुटि का सामना करना पड़ रहा है: TypeError: Object #<Resource> has no method 'push'

क्या आप कृपया मेरी मदद कर सकते हैं जहां मैं गलत हो रहा हूं?

+1

मुझे यकीन है कि नहीं हूँ, लेकिन है कि .query नोटिस() एक तुल्यकालिक संचालन नहीं है, जिसका अर्थ है आप तुरंत परिणामों पर पुनरावृति नहीं कर सकते। – finishingmove

+0

आप सही हैं। मैंने परिणामों पर पुन: प्रयास करने के लिए कॉलबैक का उपयोग किया। – codejammer

उत्तर

21

आपको डिफ़ॉल्ट $resource विधियों के लिए क्रिया पैरामीटर निर्दिष्ट करने की आवश्यकता नहीं है (ये 'get', 'save', 'query', 'remove', 'delete') हैं।

angular.module('app.services', ['ngResource']). 
    factory('profilelist',function($resource){ 
    return $resource('services/profiles/profilelist.json'); 
    }); 

पी एस: इस मामले आप .query() विधि का उपयोग कर सकते है के रूप में में (इस chaged जा करने के लिए केवल सेवा परिभाषा की आवश्यकता है) और एक और संकेत है कि हैश में अपने उदाहरण unwrapped json बल्कि तब सरणी अगर आप की जरूरत है यह एक सरणी कार्रवाई config को isArray: true सेट होने के लिए (यही कारण है कि आप कोई धक्का विधि त्रुटि प्राप्त है),:

'query': {method:'GET', isArray:true} 

और जैसा @ finishingmove देखा क्या तुम सच में तुरंत प्राप्त करने के लिए $resource परिणाम प्रदान कर सकते हैं नहीं, कॉलबैक प्रदान करते हैं:

$scope.profileslist = profilelist.query(function (response) { 
    angular.forEach(response, function (item) { 
     if (item.profileid) { 
      $scope.items.push(item.profileid); 
     } 
    }); 
}); 
+0

धन्यवाद बहुत दिमित्री Evseev। मैंने निम्नलिखित कोड भी कोशिश की और यह काम किया, लेकिन आपका जवाब आसान है! 'angular.module ('upe.services', ['ngResource'])। फैक्ट्री ('प्रोफाइलस्स्ट', फ़ंक्शन ($ संसाधन) { $ संसाधन ('सेवाएं/प्रोफाइल /: profileid.json', {}, { क्वेरी: {विधि: 'प्राप्त करें', पैराम्स: {profileid: 'profilelist '}, isArray: true} }); }); ' – codejammer

संबंधित मुद्दे