如何使用ng-hide和ng-repeat基于条件显示元素

时间:2016-01-06 22:06:56

标签: javascript angularjs angularjs-ng-repeat categorical-data ng-hide

我正在使用AngularJS,我有一个项目表,我希望能够根据颜色显示这些项目。例如,如果我单击“显示绿色”和“显示红色”复选框,表格将仅显示绿色或红色的项目。

这是项目对象:

{"name":"Fire Truck", "color":"red"}

这是我的复选框,点击后将评估为TRUE或FALSE:

<select id="item_color" ng-model='color'>
   <option value='green'>SHOW GREEN</option>
   <option value='red'>SHOW RED</option>
   <option value='blue'>SHOW BLUE</option>
</select>

这是我的表:

<tr ng-repeat="item in items" ng-hide='???'>
   <td>{{item.name}} </td>
   <td>{{item.color}} </td>
</tr>

那么如何让我的表动态显示所需的项目? 理想的解决方案还允许我为每种颜色的所有项目列出3个单独的表格。我对如何解决这个问题感到很难过。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

<tr ng-repeat="item in items" ng-hide='item.color !== color'>
   <td>{{item.name}} </td>
   <td>{{item.color}} </td>
</tr>

就这么简单。或者,使用ng-if不要反过来反转:

<tr ng-repeat="item in items" ng-if='item.color === color'>
   <td>{{item.name}} </td>
   <td>{{item.color}} </td>
</tr>

答案 1 :(得分:0)

感谢Antiga的解决方案。我使用ng-hide中的控制器功能去寻找类似的东西。这适用于3种以上的条件。

<!-- Checkboxes to toggle T/F which colors to show -->
<input type='checkbox' id='full' ng-model='toggle_red'>RED
<input type='checkbox' id='part' ng-model='toggle_green'>GREEN
<input type='checkbox' id='former' ng-model='toggle_blue'>BLUE

<!-- ng-hide will show item if color_hider() evals to false -->
<tr ng-repeat="item in items" ng-hide='color_hider(item.color)'>
   <td>{{item.name}} </td>
   <td>{{item.color}} </td>
</tr>

<script>
// variables for the toggles
$scope.toggle_red = true;
$scope.toggle_green = true;
$scope.toggle_blue = true; 

// evals to false for each color if both conditions are true
$scope.color_hider(color){
    if(color == 'red' && $scope.toggle_red === true){ 
        return false;
    }else if(color == 'green' && $scope.toggle_green === true){
        return false;
    }else if(color == 'blue' && $scope.toggle_blue === true){
        return false;
    }else{
        return true;
    };
};
</script>

答案 2 :(得分:0)

不是对整个集合进行ng重复,然后隐藏单个元素,而是过滤ng-repeat本身可能更好:

<tr ng-repeat="item in items | filter:{'color': 'green'}">

将对所有颜色为绿色的项目进行重复操作。

(对于更复杂的条件,您可以使用函数作为过滤器:https://docs.angularjs.org/api/ng/filter/filter