2015-11-30 7 views
6

現在、配列スタイルのクエリパラメータを使用して項目をフィルタリングするAPIを使用していますが、これをどのようにAngularで動作させるかはわかりません。配列スタイルのクエリパラメータをAngularjsのリソースに渡す

私の例では、ドロップダウンがあり、それは選択のngモデルをとり、これをparamersのリストに適用し、リストをフィルタリングするメソッドを起動します。通常は、通常のキー値を扱うときは単純です。以下

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

通常は、フィルタを追加するだけであれば、これは問題ありません。既存の$ scope.paramersオブジェクトに '1'を追加することです。しかし、私は何とかfilter [number] = 1を代わりに追加する必要があります。 ng-modelと私の現在の設定でこれについてどうやって行くのですか?

+2

指定してみてください[ '$ httpParamSerializerJQLike:あなたがあなたのselect要素を変更

ngParamSerializer

を使用している

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

を'](https://docs.angularjs.o '$ http' /' $ resource' 'paramSerializer'プロパティの中の' 'rg/api/ng/service/$ httpParamSerializerJQLike ')を参照してください。 – Phil

+1

' LFGFactory.query 'を使用する必要はありますか? urlパラメータに特別な必要がある場合は、ただちにurlとパラメータを構築する方が簡単です。 –

答えて

3

あなたLFGFactoryサービスを見る:

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

JSFiddle

+0

悪い方法ではありません。問題は、それがfilter =%7B%22name%22:%221182%22%7Dとしてサーバーに送信されることだけです。投稿データでは、{"name": "1182"}というフィルタとして表示され、[name]: "1182"は表示されません。 –

+0

次に、 'LFGFactory.query'のコードを見る必要があります。どのようにして "数字"を "名前"に変更しましたか? jQueryのparamルールに従っていません。 – georgeawg

+0

申し訳ありませんが、読んだ番号が必要です。間違った入力はすべてです。 –

関連する問題