2015-11-30 18 views
6

Şu anda öğeleri filtre uygulamak için dizi stili sorgu parametrelerini kullanan bir API ile çalışıyorum ancak Angular'da nasıl çalıştığını tam olarak bilmiyorum.Angularjs içinde bir kaynak için dizi stili sorgu parametreleri geçiriliyor

Aşağıdaki örneğimde seçimin ng modelini alan ve bunu parantezleyicilerin listesine uygulayan ve ardından listeyi filtrelemek için bir yöntem uygulayan bir açılırmağım var. Normalde normal anahtar değeri ile uğraşırken bu basittir. Aşağıda

 <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> 

Fabrika: Bence bu yüzden benziyor olsa da bu yüzden

$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); 
    }); 
}; 

gibi görünüyor kadar

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

Bulunduğum seti: Ancak bu durumda URL şu gibi bir şey çağrısı

.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 
      } 
     } 
    ); 
    }) 

Normalde bu, eğer istediğim, mevcut $ scope.paramers nesnesine '1' filtresi eklemekse iyi olurdu. Ancak bir şekilde filtreyi [sayı] = 1 yerine eklemem gerekiyor. Bunu ng-model ve şu anki kurulumumla nasıl yaparım?

+2

belirtmeyi deneyin [ '$ httpParamSerializerJQLike: Bu hizmeti kullanmak için select eleman değiştirme

ngParamSerializer

kullanıyor

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 } } ); }) 

'] (http: //docs.angularjs.o rg/api/ng/service/$ httpParamSerializerJQLike) '$ http'/'$ resource'' paramSerializer' özelliği – Phil

+1

' LFGFactory.query 'kullanmak zorunda mı? url parametresinde özel gereksinimleriniz varsa, url ve parametrelerinizi anında kurmanız daha kolay olacaktır. –

cevap

3

sizin LFGFactory hizmetine baktığımızda:

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

JSFiddle

+0

Kötü bir yöntem değil. Tek sorun, sunucuya =% 7B% 22name% 22:% 221182% 22% 7D olarak gönderilmesidir. Posta verisinde filtre olarak görüyorum: {"isim": "1182"} ve filtre [isim]: "1182" –

+0

Sonra "LFGFactory.query" kodunu görmem gerekiyor. Nasıl "sayı" yerine "isim" değiştirdi? JQuery param kurallarını takip etmiyor. – georgeawg

+0

Üzgünüz, okuma numarası olmalı. Kötü yazım hepsi. –