2013-05-14 7 views
9

मैं एक वेब सेवा नियंत्रक कि कार्य करता है के लिए चार सरणियों की एक सरणी बनाता है "गतिविधि" डेटाकोणीय nsResource बाकी स्ट्रिंग सरणियों

GET /api/activity/list 
GET /api/activity/1 
GET /api/activity/activity-slug-name 
PUT /api/activity 
DELETE /api/activity/1 

यह भी कुछ "मेटा" डेटा का बैकअप कार्य करता

GET /api/activity/meta/dates 
GET /api/activity/meta/states 

वे सभी ngResource का उपयोग करके बेहद अच्छी तरह से काम करते हैं क्योंकि वे सभी जेएसओएन ऑब्जेक्ट्स लौटते हैं। हालांकि/api/गतिविधि/मेटा/दिनांक नहीं है

यह चार सरणियों की एक सरणी में तार की एक सरणी

[ 
    "2013-06-02T17:05:16Z", 
    "2013-06-07T17:05:16Z", 
    "2013-08-17T17:05:16Z" 
] 

ngResource इस बदल जाता है देता है देखें: Invalid result from ngResource request with string array

जाहिर है मैं कर सकता है बस मेटा फ़ंक्शन को गतिविधिमैटा सेवा के किसी रूप में विभाजित करें, लेकिन मैं इसे सभी को एक साथ रखना चाहूंगा

मेरा प्रश्न

है

क्या इस अति उत्साही वस्तु अपघटन करने से ngResource को रोकने का कोई तरीका है?

या क्या मुझे कोणीय के साथ एक बग उठाना चाहिए?

अग्रिम धन्यवाद

* अद्यतन *

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

जबकि आप सही तकनीकी कर रहे हैं, कोई भी है स्ट्रिंग्स की हालांकि मध्य 80 के दशक के बाद से वर्ण की एक सरणी, C/C++ प्रोग्रामर एक तरफ :)

के रूप में मैं Angular.js परियोजना के साथ GitHub पर एक टिकट उठाया है नीचे दिए गए

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

+2

यह 'angular.copy के उपयोग की वजह से होता उपयोग करने के लिए कोशिश कर सकते()' '$ संसाधन के अंदर()'। जब 'कॉपी() 'फ़ंक्शन स्ट्रिंग की सरणी पाता है तो यह स्ट्रिंग को वर्णों की एक सरणी के रूप में मानता है (जो वास्तव में है)। इस व्यवहार को अक्षम करने का कोई तरीका नहीं है, अब एकमात्र असली तरीका है कि अब सीधे '$ http' सेवा का उपयोग करना है। –

उत्तर

2

हमारे आप transformRequest

query: { 
    method: 'GET', 
    isArray: true, 
    transformResponse: function (data, headers) { 
    var tranformed = []; 
    [].forEach.call(eval(data), function (d) { 
     tranformed.push({ name: d }); 
    }); 
    return tranformed; 
    } 

}

1

संदर्भ केवल एक सरणी प्राप्त करने के लिए के तार $http service बजाय का उपयोग करें।