2013-03-31 11 views
13

से लौटाए गए सरणी के साथ काम नहीं कर रहा है, मैं angularjs सीखने की कोशिश कर रहा हूं, और एक बाकी एपीआई से लौटाई गई सरणी में डेटाबेस करने की कोशिश में एक ब्लॉक मारा है। मेरे पास एक साधारण एज़ूर एपीआई व्यक्ति वस्तुओं की एक सरणी लौट रहा है। सेवा यूआरएल http://testv1.cloudapp.net/test.svc/persons है।

मेरे नियंत्रक कोड लगता है:

<html> 
<head></head> 
<body> 
<div ng-app="ToDoApp"> 
    <div ng-controller="TodoCtrl"> 
     <h1>{{msg}}</h1> 

     <table class="table table-striped table-condensed table-hover"> 
      <thead> 
       <th>Email</th> 
       <th>First Name</th> 
       <th>Last Name</th> 
      </thead> 
      <tbody> 
       <tr ng-repeat="item in items"> 
        <td>{{item.Email}}</td> 
        <td>{{item.FirstName}}</td> 
        <td>{{item.LastName}}</td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
</div> 
</body> 
</html> 

प्रश्न::

angular.module("ToDoApp", ["ngResource"]); 
function TodoCtrl($scope, $resource) { 
$scope.svc = $resource('http://testv1.cloudapp.net/test.svc/persons', { 
    callback: 'JSON_CALLBACK' 
}, { 
    get: { 
     method: 'JSONP', 
     isArray: true 
    } 
}); 
$scope.items = $scope.svc.get(); 
$scope.msg = "Hello World"; 
} 

मेरे एचटीएमएल तरह लग रहा है ऊपर html में मेज किसी भी डेटा प्रदर्शित नहीं हो रहा है। मैं फायरबग में एपीआई को कॉल देख सकता हूं, और एपीआई से जेएसओएन प्रतिक्रिया भी देख सकता हूं। मैं गलत तरीके से क्या कर रहा हूं जो आरईएसटी एपीआई को डाटाबेसिंग का कारण नहीं बना रहा है?

पुनश्च:

angular.module('privilegeService', ['ngResource']). 
factory('Privilege', function ($resource) { 
    return $resource('api/users/:userId/privileges', 
        {userId: '@id'}, 
        {'query': {method:'GET', isArray:false}}); 
}); 

से आप वस्तुओं और उसके गुणों का उपयोग करने की container.object.property संकेतन का उपयोग कर सकते हैं: अगर आप वस्तुओं नेस्ट है, http://jsfiddle.net/jbliss1234/FBLFK/4/

उत्तर

7

उपयोग isArray परम: JSFiddle इस मुद्दे का प्रदर्शन पर है।

+0

isArray परम पहले से ही वहाँ है। इसे सही या गलत पर सेट करने से इस मामले में कोई प्रभाव नहीं पड़ता है। क्या आप कृपया jsfiddle पर एक नज़र डालें और सलाह दें कि डेटा को बाध्य करने के लिए वास्तव में क्या करने की आवश्यकता है। धन्यवाद –

27

$ संसाधन सेवा के साथ सरणी को संभालने के लिए, यह सुझाव दिया गया है कि आप क्वेरी विधि का उपयोग करें। जैसा कि आप नीचे देख सकते हैं, क्वेरी विधि सरणी को संभालने के लिए बनाई गई है।

{ 'get': {method:'GET'}, 
    'save': {method:'POST'}, 
    'query': {method:'GET', isArray:true}, 
    'remove': {method:'DELETE'}, 
    'delete': {method:'DELETE'} }; 

कोड आप अपने दायरे को यह सरणी वापस जाने के लिए में उपयोग करना चाहिए

angular.module("ToDoApp", ["ngResource"]); 

function TodoCtrl($scope, $resource) { 
    var svc = $resource('http://testv1.cloudapp.net/test.svc/persons'); 
    $scope.items = svc.query(); 
    $scope.msg = "Hello World"; 
} 

है मतलब यह है कि आपके REST API का काम कर रहा है और एक सरणी वापस आ जाएगी।

डॉक्स आगे पढ़ने के सिर के लिए

http://docs.angularjs.org/api/ngResource.$resource

9

बस पार पोस्ट मेरी एक समाधान एलेक्ज़ैंडर एक और stackoverflow सवाल पर दिया के अनुकूलन करना चाहता था: https://stackoverflow.com/a/16387288/626810:

methodName: {method:'GET', url: "/some/location/returning/array", transformResponse: function (data) {return {list: angular.fromJson(data)} }} 
इस पोस्ट मेरी समस्या हल

तो जब मैं इस समारोह फोन:

var tempData = ResourceName.methodName(function(){ 
    console.log(tempData.list); // list will be the array in the expected format 
}); 

जाहिर है इस एक छोटे से भारी यदि आप कई तरीकों/संसाधनों में सरणियों प्राप्त करने की आवश्यकता है, लेकिन यह काम करने के लिए लगता है।

+0

transformResponse: समारोह (डेटा, हेडर) { वापसी {गिनती: angular.fromJson (डेटा)} } // मेरे लिए एकदम सही काम करता है। धन्यवाद! –

0

सरणी जो आप सर्वर से वापस प्राप्त करते हैं वह एक साफ़ सरणी नहीं है, लेकिन इसमें कुछ अतिरिक्त गुण हैं। यह ng-repeat बनाता है जब आप in का उपयोग करते हुए इसे फिर से चालू करते हैं तो कुछ भी नहीं दिखाते हैं।

आपको सर्वर से सरणी पर जाने के लिए एक विशेष इटरेटर की आवश्यकता है, जो उन अतिरिक्त गुणों को अनदेखा कर देगा।तो सबसे पहले forEach के माध्यम से सरणी डेटा निकालने, इस तरह:

$scope.items = [] 
var response = $scope.svc.get(); 
angular.forEach(response, function(item) { 
    $scope.items.push(item); 
}); 

तो फिर तुम

<tr ng-repeat="item in items"> 
0

मैं इसी तरह की समस्या और जवाब काफी मेरे लिए काम किया की गैर, मैं यहाँ क्या किया था कर सकते हैं:

$resource("/", {}, { 
     query: { 
      method: 'GET', 
      isArray: false, 
      transformResponse: function (data, headers) { 
       //if no data return so no warnings 
       if (data == ''){ 
        return; 
       } 

       return {data: $.extend({}, eval("{" + data + '}'))}; 
      } 
     } 
    }); 

jQuery का उपयोग करती। मूल रूप से ऑब्जेक्ट को सरणी में परिवर्तित करें ताकि angularjs संसाधन अपने पैंट को पोंछ न सके।

+0

जेएसओएन पार्स करने के लिए क्षमा करें? कृपया मत करो! JSON.parse का प्रयोग करें! –