2013-08-09 11 views
11

मुझे एंगुलरजेएस के $ http के साथ एक अजीब व्यवहार हो रहा है और वास्तव में यह समझ में नहीं आता कि ट्रांसफ्रेंस कैसे काम करता है (दस्तावेज़ इस पर थोड़ा हल्का है)।

WebAssets.get = function() { 
     return $http.get('/api/webassets/list', { 
      transformResponse: [function (data, headersGetter) { 
       // not sure what to do here?! 
       return data; 
      }].concat($http.defaults.transformResponse) // presume this isn't needed, added for clarity 
     }).then(function (response) { 
      return new WebAssets(response.data); 
     }); 
    }; 

एपीआई ऑब्जेक्ट की श्रृंखला रिटर्न:

[{"webasset_name": "...", "application_id": "...", "etc": "..."}, ... ] 

लेकिन जब transformResponse किया है यह बुराई व्यावसायिक डेटा एक अनुक्रमित वस्तु में तब्दील हो गया है:

{"0":{"webasset_name":"...","application_id":"...", "etc": "..."}, "1":....} 

मैं रखना चाहते हैं मूल डेटा संरचना (वस्तुओं की एक सरणी)।

+0

आप यहाँ देखने के लिए चाहते हो सकता है: http://stackoverflow.com/questions/17134401/angular-extending-resource-subobject-with-custom-methods – AlwaysALearner

+0

वे $ संसाधन का उपयोग कर रहे हैं, मैं $ http –

उत्तर

14

अपने डेटा को किसी ऑब्जेक्ट में कनवर्ट करने के लिए कोणीय प्राप्त करने के लिए आपको डिफ़ॉल्ट $ httpProvider.defaults.transformResponse के व्यवहार को ओवरराइड करने की आवश्यकता है। यह वास्तव में ट्रांसफार्मर की एक सरणी है। $http.defaults.transformResponse = []; यहाँ एक उदाहरण ट्रांसफार्मर मैं तार करने के लिए 64-बिट लंबे ints कन्वर्ट करने के लिए इस्तेमाल किया है है: तुम बस इसे खाली होने के लिए सेट कर सकते हैं

function longsToStrings(response) { 
    //console.log("transforming response"); 
    var numbers = /("[^"]*":\s*)(\d{15,})([,}])/g; 
    var newResponse = response.replace(numbers, "$1\"$2\"$3"); 
    return newResponse; 
} 

डिफ़ॉल्ट सूची पर एक ट्रांसफॉर्मर जोड़ने के लिए, से आगे कहते हैं कि JSON deserializer, तो आप ऐसा कर सकते हैं:

$http.defaults.transformResponse.unshift(longsToStrings); 
3

संसाधन 0: "f" 1: "एक" 2: "एल" 3: "एस" 4: "ई" यह अंत में मेरे लिए काम किया:

transformResponse: function (data, headersGetter) { 
    return { isCorrect: angular.fromJson(data) } 
    } 
1

का उपयोग कर संसाधन क्वेरी विधि का प्रयास करें

https://github.com/angular/angular.js/issues/6314

+1

का उपयोग कर रहा हूं क्या आप अपना उदाहरण कुछ उदाहरण कोड के साथ बढ़ा सकते हैं? यह कोड और विवरण देखने के लिए हमेशा स्पष्ट है। आप अपना जवाब संपादित कर सकते हैं। वैसे, आपने दो खाते क्यों बनाए? –

+1

मुझे लगता है कि आपको क्या करने की आवश्यकता है $ http को सूचित करना कि आप ऑब्जेक्ट की बजाय सरणी लौट रहे हैं –

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