当我一次选择两个选择按钮时,我在显示和隐藏行时遇到问题。
只使用一个按钮,我可以显示/隐藏正确的行。 一次使用两个按钮,将不会显示任何行。
代码中的逻辑错误在哪里?
请检查:http://jsfiddle.net/xEyJZ/83/
<div ng-controller="MyCtrl">
<p>
<input type="checkbox" ng-init="showNew=false" ng-click="showNew =! showNew"><span> Show new only</span> <br>
<input type="checkbox" ng-init="showOld=false" ng-click="showOld =! showOld"><span> Show old only </span>
</p>
<table border="1">
<tr ng-repeat="person in persons" ng-class="{'newp':person.newp, 'oldp':person.oldp}"
ng-hide="(!person.newp && showNew) || (!person.oldp && showOld)">
<td>{{ person.id }}</td>
<td>{{ person.name }}</td>
<td>{{ person.city }}</td>
</tr>
</table>
</div>
答案 0 :(得分:0)
使用自定义过滤器:
<input type="checkbox" ng-model="showNew">..Show new only..
<input type="checkbox" ng-model="showOld">..Show old only..
..
<tr ng-repeat="person in persons | personsFilter : showNew : showOld" ..>
JS
myApp.filter("personsFilter",function(){
return function(input, showNew, showOld){
if(!showNew && !showOld){
return input;
}
else if(showNew && !showOld){
var temp = [];
for(var i = 0; i < input.length; i++){
if(input[i].newp && !input[i].oldp)
temp.push(input[i]);
}
return temp;
}
else if(showOld && !showNew){
var temp = [];
for(var i = 0; i < input.length; i++){
if(input[i].oldp && !input[i].newp)
temp.push(input[i]);
}
return temp;
}
else if(showOld && showNew){
var temp = [];
for(var i = 0; i < input.length; i++){
if(input[i].oldp || input[i].newp)
temp.push(input[i]);
}
return temp;
}
}
});
的 Fiddle 强>
答案 1 :(得分:0)
布尔表达式中有错误: 正确如下:
ng-hide="(!person.newp && showNew ) || (!person.oldp && showOld)"
答案 2 :(得分:0)
您可以在过滤器中使用比较器:
ng-repeat="person in persons | filter:{newp:showNew, oldp:showOld}:showTest"
并在控制器集比较功能中:
$scope.showTest = function(actual, expected){
if(!$scope.showNew && !$scope.showOld)
return true;
return angular.equals(expected, actual);
}