大家好。我使用AngularJs在表格中使用ng-repeat指令显示数据,并使用文本框来过滤猫的“颜色”属性。请注意,某些cat具有null Color属性。
一旦我在文本框中键入一些文本并清除它,所有color属性为null的cat都会消失。
我在expected === ''
上设置了一个自定义比较器返回true,但它不起作用。实际上,一旦搜索文本框被放入某些文本并且之后被清除,所有颜色为property === null
的猫都将永远不会显示,即使我让比较器始终返回true。
在ng-repeat中使用过滤器时,有没有办法允许空值?谢谢你inadvance !!
JS小提琴演示:http://jsfiddle.net/gLL7wvcL/2/
我的数据(猫阵列)
$scope.cats = [
{'Name': 'John',
'Sex': 'Male',
'Color': 'Black'},
{'Name': 'Rose',
'Sex': 'Female',
'Color': 'White'},
{'Name': 'Cindy',
'Sex': 'Female',
'Color': 'Yellow'},
{'Name': 'David',
'Sex': 'Male',
'Color': 'Black'},
{'Name': 'Garen',
'Sex': 'Male',
'Color': null},
{'Name': 'Jim',
'Sex': 'Male',
'Color': null},
{'Name': 'Charotte',
'Sex': 'Female',
'Color': 'Black'}
];
并且两个比较器都不起作用,一旦搜索文本框被放入一些文本并在之后被清除,所有具有color属性=== null的cat将永远不会显示。
$scope.myComparator = function (actual, expected)
{
if (expected === '')
return true;
else
{
var text = ('' + actual).toLowerCase();
return text.indexOf(expected) > -1;
}
};
$scope.myComparator = function (actual, expected)
{
return true;
};
答案 0 :(得分:1)
这里的问题是,在您清除输入后,过滤器模型如下所示:
{"Color": ""}
所以空字符串与颜色null
的颜色不匹配。你需要做的就是删除" Color"属性如果它是null
,可能会有变化。在这种情况下,您根本不需要myComparator
:
$scope.clear = function() {
if ($scope.search.Color === null) {
delete $scope.search.Color;
}
};
你只需要使用
ng-repeat="cat in cats | filter:search"
答案 1 :(得分:0)
另一种方法是使用过滤函数,与整个对象而不是属性进行比较,并将标准附加到控制器范围。
<强>标记:强>
<tr ng-repeat="cat in cats | filter:myComparator">
<强>控制器:强>
$scope.myComparator = function (actual)
{
var expected = $scope.filter;
if (expected === '')
{
return true;
}
else
{
var text = ('' + actual.Color).toLowerCase();
return text.indexOf(expected) > -1;
}
};
更新小提琴中的完整示例:http://jsfiddle.net/gLL7wvcL/3/
答案 2 :(得分:-1)
if(expect ===&#39;&#39;)将检查空字符串,而不是null。
尝试用
替换它if(!expected) .....