2015-11-30 10 views
6

में संसाधन के लिए सरणी शैली क्वेरी पैरामीटर पास करना मैं वर्तमान में एक एपीआई के साथ काम कर रहा हूं जो आइटम फ़िल्टर करने के लिए सरणी शैली क्वेरी पैरामीटर का उपयोग करता है लेकिन मुझे पूरा यकीन नहीं है कि यह कोणीय में कैसे काम कर रहा है।Angularjs

नीचे दिए गए मेरे उदाहरण में मेरे पास एक ड्रॉप डाउन है जो चयन का एनजी मॉडल लेता है और इसे पैरामीटर की सूची में लागू करता है और फिर मेरी सूची फ़िल्टर करने के लिए एक विधि को सक्रिय करता है। सामान्य कुंजी मान से निपटने के दौरान आम तौर पर यह सरल होता है।

 <div class="form-group pull-right"> 
      <select id="plat-sel" name="plat-sel" class="form-control" ng-model="paramers.filter" ng-change="refresh()"> 
       <option value="" disabled selected>Filter by Platform</option> 
       <option value="1183">Xbox One</option> 
       <option value="1184">PlayStation 4</option> 
       <option value="1182">PC</option> 
       <option value="1188">Wii U</option> 
       <option value="1186">Xbox 360</option> 
       <option value="1185">PlayStation 3</option> 
      </select> 
     </div> 

नीचे फैक्टरी: मेरे विचार तो की तरह दिखता है जबकि इतने

$scope.paramers = { 
    include: 'playing', 
    sort: '-id' 
}; 
$scope.refresh = function() { 
    LFGFactory.query($scope.paramers, function success (response) { 
     $scope.loading = true; 
     var data = response.data; 
     if (data.length >= 1) { 
      $scope.rowList = data; 
      $scope.loading = false; 
     } else { 
      $scope.loading = false; 
     } 
    }, 
    function err (data) { 
     console.log(data); 
    }); 
}; 

की तरह दिखता है

example.com/api/list?filter[number]=1 

मेरे वर्तमान सेट अप: हालांकि इस मामले में URL ऐसा कुछ के लिए कहता है

.factory('LFGFactory', function($resource) { 

    var base = 'http://example.com/api/v1.0/'; 


    return $resource(base +'lfg', {}, 
     { 
      update: { 
      method: 'PUT', 
      isArray: true 
      }, 
      delete: { 
      method: 'DELETE', 
      isArray: true 
      }, 
      query: { 
      method: 'GET', 
      isArray: false 
      } 
     } 
    ); 
    }) 

आम तौर पर यह ठीक होगा अगर मैं चाहता था कि फ़िल्टर को जोड़ना था: '1' मौजूदा $ scope.paramers ऑब्जेक्ट में। हालांकि मुझे किसी भी तरह फ़िल्टर [संख्या] = 1 जोड़ने की जरूरत है। मैं एनजी मॉडल और मेरे वर्तमान सेट अप के साथ इस बारे में कैसे जाउंगा?

+2

निर्दिष्ट करने का प्रयास [ '$ httpParamSerializerJQLike '] (https: //docs.angularjs.o आरजी/एपीआई/एनजी/सेवा/$ httpParamSerializerJQLike) '$ http' /' $ संसाधन' 'paramSerializer' संपत्ति – Phil

+1

में क्या आपको' LFGFactory.query 'का उपयोग करना है? यदि आपके पास url पैरामीटर में विशेष आवश्यकताएं हैं तो बस यूआरएल और फ्लाई पर अपना पैरामीटर बनाना आसान होगा। –

उत्तर

3

अपने LFGFactory सेवा को देखते हुए:

angular.module('myApp').factory('LFGFactory', function($resource) { 
     var base = 'example.com/api/v1.0/'; 
     return $resource(base +'lfg', {}, 
      { update: { method: 'PUT', isArray: true }, 
       delete: { method: 'DELETE', isArray: true }, 
       query: { method: 'GET', isArray: false } } 
    ); 

}) 

आप ngParamSerializer

उपयोग कर रहे हैं

करने के लिए अपने select तत्व बदलें:

<select id="plat-sel" name="plat-sel" class="form-control" 
      ng-model="paramers['filter[number]']" ng-change="refresh()"> 

JSFiddle

+0

कोई खराब विधि नहीं है। केवल समस्या यह है कि यह सर्वर को फ़िल्टर =% 7 बी% 22 नाम% 22:% 221182% 22% 7 डी के रूप में भेजता है। पोस्ट डेटा में मैं इसे फ़िल्टर के रूप में देखता हूं: {"name": "1182"} और फ़िल्टर नहीं [नाम]: "1182" –

+0

फिर मुझे 'LFGFactory.query' के लिए कोड देखने की आवश्यकता है। यह "संख्या" को "नाम" में कैसे बदल गया? यह jQuery परम नियमों का पालन नहीं कर रहा है। – georgeawg

+0

क्षमा करें कि पढ़ने की संख्या होनी चाहिए। गरीब टाइपिंग सब कुछ है। –