我在ng-repeat上有这个
<tr ng-repeat="website in websites">
<td>{{website.url}}</td>
</tr>
来自website
数组的每个websites
对象如下所示:
{
url: "example.com",
groups: []
}
问题:如何将过滤器应用于上面的循环,以便它只显示groups
属性为空数组的元素?
我尝试的事情:
data-ng-repeat="website in websites | filter: {groups: []}"
data-ng-repeat="website in websites | filter: !groups.length"
data-ng-repeat="website in websites | filter: groups.length === 0"
(在控制台中没有错误但过滤掉所有内容)
data-ng-repeat="website in websites | filter: {groups: ''}"
(与我想要的相反,只显示groups
不是空数组的项目)
data-ng-repeat="website in websites | filter: {groups: null}"
(如果不使用[]我使用null来表示没有值,这可行,但它看起来很麻烦......因为我需要经常注意{{ 1}}属性变为空,并手动将其设置为空)
答案 0 :(得分:4)
我在控制器中添加了一个过滤功能:
JS:
angular.module('myApp', [])
.controller('myController', ['$scope',
function($scope) {
$scope.friends = [{
name: 'John', phone: '555-1276', a: [1, 2, 3]
}, { name: 'Mary', phone: '800-BIG-MARY', a: [1, 2, 3]
}, { name: 'Mike', phone: '555-4321', a: null
}, { name: 'Adam', phone: '555-5678', a: []
}, { name: 'Julie', phone: '555-8765', a: []
}, { name: 'Juliette', phone: '555-5678', a: []
}];
$scope.filterFn = function(item) {
// must have array, and array must be empty
return item.a && item.a.length === 0;
};
}
]);
在你的模板中:
<table>
<tr><th>Name</th><th>Phone</th><th>array len</th></tr>
<tr ng-repeat="friend in friends | filter: filterFn">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.a.length}}</td>
</tr>
</table>
答案 1 :(得分:3)
你可以像这样使用比较器参数。
<tr ng-repeat="website in websites | filter:{groups: []}:true">
<td>{{website.url}}</td>
</tr>
Angularjs official document描述true
的含义。
true:函数的简写(实际,预期){return angular.equals(actual,expected)}。这基本上是对预期和实际的严格比较。