ngRepeat 按数组过滤 - 属性
ngRepeat filter by array-property
如果我有一个对象 属性 是一个数组,我如何根据这个 属性 的第一个元素进行过滤?
数据
{
Id: "0",
Name: ["John", "Doe"]
}
ngRepeat
<li ng-repeat="u in users | filter:{Name[0]: 'John'}">{{ u.Name[0] + ' ' + u.Name[1] }}</li>
试试这个
<li ng-repeat="u in users | filter:u.Name[0] == 'John'">{{ u.Name[0] + ' ' + u.Name[1] }}</li>
从 this SO answer 稍作修改以使用数组:
<li ng-repeat="u in users | filter: {Name: ['John']}">{{ u.Name[0] + ' ' + u.Name[1] }}</li>
更新:这似乎在1.2.1左右的版本之后不起作用。您可以在 this fiddle using v1.2.1 and this one using v1.4.8 中看到差异。不确定这两者之间发生了什么变化,或者该功能是否曾经得到官方支持。作为替代方案,您可以使用函数谓词,如下所示:
<li ng-repeat="u in users | filter: isJohn">{{ u.Name[0] + ' ' + u.Name[1] }}</li>
控制器:
$scope.isJohn = function(value){
return value.Name[0] === 'John';
};
但话又说回来,这并不比创建像评论中建议的 nubinub 这样的自定义过滤器简单多少,而且可重用性肯定更差。
如果我有一个对象 属性 是一个数组,我如何根据这个 属性 的第一个元素进行过滤?
数据
{
Id: "0",
Name: ["John", "Doe"]
}
ngRepeat
<li ng-repeat="u in users | filter:{Name[0]: 'John'}">{{ u.Name[0] + ' ' + u.Name[1] }}</li>
试试这个
<li ng-repeat="u in users | filter:u.Name[0] == 'John'">{{ u.Name[0] + ' ' + u.Name[1] }}</li>
从 this SO answer 稍作修改以使用数组:
<li ng-repeat="u in users | filter: {Name: ['John']}">{{ u.Name[0] + ' ' + u.Name[1] }}</li>
更新:这似乎在1.2.1左右的版本之后不起作用。您可以在 this fiddle using v1.2.1 and this one using v1.4.8 中看到差异。不确定这两者之间发生了什么变化,或者该功能是否曾经得到官方支持。作为替代方案,您可以使用函数谓词,如下所示:
<li ng-repeat="u in users | filter: isJohn">{{ u.Name[0] + ' ' + u.Name[1] }}</li>
控制器:
$scope.isJohn = function(value){
return value.Name[0] === 'John';
};
但话又说回来,这并不比创建像评论中建议的 nubinub 这样的自定义过滤器简单多少,而且可重用性肯定更差。