2016-03-25 20 views
1

カスタム角度フィルタをチェックボックスで作成し、選択したチェックボックスに応じて検索結果が変わります。私はすべてのフィルタをリセットするリセットボタンを作成しているので、何をすべきか分かりません。私はresetFilters関数の下にもっと多くのものを追加する必要があることを知っているが、私が試したコードは動作していない。助けてください!リセットボタンをクリックしたときにカスタム角度フィルタをリセットする

JS部分:

$scope.FREEcheckChange = function(){ 
     for (var check4 in $scope.FREE){ 
      if($scope.FREE[check4].on){ 
       $scope.showAll4 = false; 
       return;     
      } 
     } 
     $scope.showAll4 = true; 
    }; //end of FREEcheckChange 


    $scope.FREEFilter = function(f){ 
    if($scope.showAll4) 
     {return true;} 
    var selectedBox4 = false; 

    for(var i in $scope.FREE){   
     var catFive = $scope.FREE[i]; 
     if(catFive.on){ 
      if(f.cat.indexOf(catFive.name) == -1) {return false;} 
      else {selectedBox4 = true;} 
     }    
    }   

    return selectedBox4;   
} 


$scope.YEARFilter = function(d){ 
    if($scope.showAll3) 
     {return true;} 
    var selectedBox3 = false; 

    for(var i in $scope.YEAR){   
     var catFour = $scope.YEAR[i]; 
     // console.log(catFour); 
     if(catFour.on){ 
      if(d.cat.indexOf(catFour.name) == -1) {return false;} 
      else {selectedBox3 = true;} 
     }    
    }   
    return selectedBox3;   
} 
$scope.resetFilters = function(){ 
     $('input:checkbox').removeAttr('checked'); } 

HTML:

<div ng-repeat="item in filteredProducts = (products | filter: YEARFilter | filter: FREEFilter | searchFilter:searchString)"> 

<button type="button" class="btn btn-default btn-block" style="margin: 7px 0;" ng-click="resetFilters();">RESET FILTERS</button> 

<div ng-repeat= "FREEcategory in FREE"> 
         <input type="checkbox" ng-model="FREEcategory.on" ng-change ="FREEcheckChange()">   
         {{FREEcategory.name}} 
        </div> 
<div ng-repeat= "YEARcategory in YEAR"> 
        <input type="checkbox" ng-model="YEARcategory.on" ng-change ="YEARcheckChange()">   
        {{YEARcategory.name}} 
        </div> 
+0

フィーリングまたはplunkrを提供できますか?また、私はあなたが正しく使用することができるように、まずアプリケーションにフィルタを適切に登録しなければならないと思います。今はちょうど$スコープの関数です。また、コンソールにエラーがないかチェックしましたか?もう一つのことは - このコードはコントローラの中にありますか? –

+0

フィルタが使用するデータモデルをリセットする必要があります... jQueryを使用しない – charlietfl

答えて

0

@charlietflはコメントで言ったように、モデルとjQueryを使用していないチェックボックスを更新します。たとえば、次のようなもの(テストされていないもの):

$scope.resetFilters = function(){ 
    angular.forEach($scope.FREE, function(value, key) { 
     $scope.FREE[key].on = false; 
    }); 
    angular.forEach($scope.YEAR, function(value, key) { 
     $scope.YEAR[key].on = false; 
    }); 
} 
0

Thanks @ charlietfl、特に@JanP!私は「リセット」ボタンがクリックされたときにすべての結果を表示するために1行追加しました。これは私が持っているものであり、完璧に働いています。

$scope.resetFilters = function(){ angular.forEach($scope.YEAR, function(value, key) { $scope.YEAR[key].on = false; $scope.showAllYEAR = true; }); angular.forEach($scope.FREE, function(value, key) { $scope.FREE[key].on = false; $scope.showAllFREE = true; }); }

関連する問題