2016-11-11 4 views
0

私はselectの特定のオプションのフィルタをクリアしようとしています。フィルタが特定のJSONフィールドに適用されているときに特定のselectオプションを使用してangularJS式のフィルタをクリアするにはどうすればよいですか?

JSONの希望のフィールドnameから他のオプションを使用して値を取得できました。しかし、No Filterを選択すると、すべてのフィルタをクリアしてJSON値全体を表示します。続き

は私のコードです:何によって

フィルタ:

  <select ng-model="select2.name" ng-options="item.name as item.name for item in items"> 
       <option value="">No filter</option> 
      </select> 
     </div> 

     <div ng-repeat="item in items | filter: select2 "> 
      {{ item.name }}: {{ item.fruit }} 
     </div> 
    </section> 
    </body> 
</html> 

答えて

0

あなたが選択された受信場合は、そのロジックに

を独自のカスタムフィルタを作成することができますドロップダウンから値をnullとしてそのまま配列を返すことができます。ここで

myApp.filter('filterServer', function() { 
    return function (servers,initialState) { 
    var filteredArray=[]; 
    if(!initialState) 
    return servers; 
    for (var k = 0; k < servers.length; ++k) { 
    var server = servers[k]; 
    if (server.state == initialState) filteredArray.push(server); 
    } 
    return filteredArray; 
    }; 
}); 

はデモサンプルがhttp://fiddle.jshell.net/znhhw37v/1/

。注:私は、私はあなたの条件をシミュレートするために、サンプルを作成したJSONを持っていけません。

0

フィルタ式が未定義で返された場合、フィルタは適用されません。だから、あなたは次のような何かができる:

var app = angular.module('YourModule', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.listings = [{location: "foo"}, {location: "bar"}]; 
 
    
 
    $scope.locations = ["foo", "bar", "xyz"]; 
 
});
<!DOCTYPE html> 
 
<html ng-app="YourModule"> 
 

 
    <head> 
 
    <meta charset="utf-8" /> 
 
    <script src="http://code.angularjs.org/angular-1.0.1.js"></script> 
 
    </head> 
 

 
    <body ng-controller="MainCtrl"> 
 
    <select ng-model="locationFilter" ng-options="l as l for l in locations"> 
 
     <option value="">all</option> 
 
    </select> 
 
    <div ng-repeat="item in listings | filter: (!!locationFilter || undefined) && {location: locationFilter}">{{item.location}}</div> 
 
    </body> 
 

 
</html>

<div ng-repeat="item in listings | filter:(!!locationFilter || undefined) && {location: locationFilter}"> 
     {{item}} 
</div> 
ホープは、あなたの質問に答えました。

0

フィルタリングするモデルとしてselect2.nameを使用してフィルタを更新するだけで済みます。フィルタなしを選択すると、モデルは ""になり、フィルタが自動的にトリガされます。

<div> 
 
    <select ng-model="select2.name" ng-options="item.name as item.name for item in items"> 
 
    <option value="">No filter</option> 
 
    </select> 
 
</div> 
 

 
<div ng-repeat="item in items | filter: select2.name "> 
 
    {{ item.name }}: {{ item.fruit }} 
 
</div>

関連する問題