2015-01-26 6 views
11

डिफ़ॉल्ट रूप से $resource.query()$resource ऑब्जेक्ट्स बनने वाली ऑब्जेक्ट्स की एक सरणी की अपेक्षा करने के लिए सेट किया गया है। एक अच्छा, आरामदायक तरह से पेजिंग समायोजित करने के लिए, मैं अपने GET /api/widgets समाप्ति बिंदु की स्थापना की है निम्नलिखित वस्तु वापस जाने के लिए:

{ 
    currentPage: 1, 
    perPage: 20, 
    totalItems: 10039, 
    items: [{...}, {...}, {...}] 
} 

वहाँ इसे बनाने के लिए इतना है कि कोणीय पता चल जाएगा कि items संपत्ति की सरणी है एक रास्ता है आइटम $resource वस्तुओं के लिए?

उत्तर

22

आप अपनी खुद की कस्टम क्रिया निर्दिष्ट करने के लिए की जरूरत है।

factory('Widget', function($resource) { 
    return $resource('/api/widgets'); 
}); 

इस लिए यह बदलें:

मैं अपने कोड कुछ इस तरह दिखता कल्पना

factory('Widget', function($resource) { 
    return $resource(/api/widgets, null, { 
    query: { 
     method: 'GET', 
     isArray: true, 
     transformResponse: function(data) { 
     return angular.fromJson(data).items; 
     } 
    } 
    }); 
}); 
+0

यह बहुत अच्छा काम किया! –

+0

तो, इस दृष्टिकोण के साथ, मैं ट्रांसफॉर्मेशन विधि के बाहर से पेजिंग जानकारी तक पहुंच कैसे प्राप्त करूं? आपने निश्चित रूप से मूल प्रश्न का उत्तर दिया है, लेकिन अब मुझे एक नई समस्या है :) –

+0

पूरी तरह से सुनिश्चित नहीं है, लेकिन आप इस 'var widgets = widget.query() को आजमा सकते हैं; विजेट्स। $ वादा। फिर (फ़ंक्शन (डेटा) {console.log (डेटा);}); '। –

2

$resouce.get का उपयोग करना आसान था, यदि आप क्वेरी का उपयोग करना चाहते हैं तो आप उस बीहाइवर को ओवरराइड कर सकते हैं।

$resource('/notes/:id', null, 
{ 
    'query': {method:'GET', isArray:false} 
}); 

अधिक जानकारी https://docs.angularjs.org/api/ngResource/service/ $ संसाधन

+0

यह मेरी समस्या का समाधान नहीं है। संपूर्ण प्रतिक्रिया ऑब्जेक्ट '$ संसाधन' होगा, और '$ save' या' $ अपडेट' कॉल करने का प्रयास करने वाले मूल्यों को जारी रखने का प्रयास करेंगे जो वास्तविक संसाधन के मॉडल का हिस्सा नहीं हैं। मुझे यह जानने के लिए '$ resource.query()' को कॉन्फ़िगर करने की आवश्यकता है कि वास्तविक संसाधन ऑब्जेक्ट्स प्रतिक्रिया के 'आइटम' सरणी में निहित हैं। –

+0

मैंने यह किया है, और मेरे लिए काम करता है, मैं नहीं देखता कि यह कैसे काम नहीं करेगा, जब आप अपडेट को कॉल करेंगे तो आप आईडी और नई ऑब्जेक्ट को निर्दिष्ट करेंगे, मैं नहीं देखता कि यह कैसे काम करता है 'myresource.update ({id: 1 }। {propery1: 1, property2: 2}) ' –

+0

यह काम करेगा यदि मैं '$ संसाधन' का उपयोग सख्ती से अनुरोध बनाने और प्रतिक्रिया ऑब्जेक्ट प्राप्त करने के लिए एक तंत्र के रूप में कर रहा हूं, हालांकि, '$ संसाधन' की अतिरिक्त विशेषताएं हैं जो व्यापक रूप से समझा नहीं जाता है। विशेष रूप से, आरईएसटी एंडपॉइंट्स द्वारा लौटाई गई ऑब्जेक्ट्स 'संसाधन' ऑब्जेक्ट्स बन जाती है। मेरे मामले में, मुझे कोणीय को बताने का एक तरीका चाहिए कि लौटाई गई वस्तु की 'सूची' संपत्ति वास्तविक संसाधन हैं। स्वीकृत उत्तर देखें। –

0

मैं सिर्फ एक ही समस्या थी, और मैं एक समाधान है जो एक हो सकता है का प्रस्ताव करना चाहता था थोड़ा बेहतर:

factory('Widget', function($resource) { 
    return $resource(/api/widgets, null, { 
     query: { 
      interceptor: { 
       response: function(response) { 
        return response.data.items; 
       } 
      } 
     } 
    } 
} 

मैं इसे बेहतर हो सकता है, क्योंकि आप मानक कोणीय बिहेव पुन: उपयोग कर रहे हैं लगता है iour (जो वास्तव में, fromJson से थोड़ा अधिक कर रहा है) और आउटपुट परिणाम को अवरुद्ध करने के लिए जो आप चाहते हैं उसे फ़िल्टर करना।

0

मैं पेजिंग सूचनाओं के साथ क्वेरी के लिए इस पैटर्न का उपयोग करता हूं।

module.config(function($resourceProvider){ 
    $resourceProvider.defaults.actions.query = { 
     method: 'GET', 
     interceptor: { 
      response: function(response) { 
       response.resource.$totalCount = response.data.totalCount; 
       response.resource.$limit = response.data.limit; 
       response.resource.$offset = response.data.offset; 
       return response.resource; 
      } 
     }, 
     transformResponse: function(data, headers, status) { 
      var out = angular.fromJson(data); 
      out.data.totalCount = out.totalCount; 
      out.data.limit = out.limit; 
      out.data.offset = out.offset; 
      return out.data; 
     }, 
     isArray: true 
    }; 
}) 
संबंधित मुद्दे

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