我有这样的数据数组:
$scope.data = [{
name: 'joseph',
statarray: [{
status: 'Online',
status: 'Offline',
}],
active: 'yes'
},
{
name: 'arnold',
statarray: [{
status: 'Offline'
}],
active: 'no'
},
{
name: 'john',
statarray: [{
status: 'Online'
}],
active: 'yes'
}
];
$scope.findObjectByKey = function(array, key, value) {
for (var i = 0; i < array.length; i++) {
if (array[i][key] === value) {
return array[i];
}
}
return null;
};
$scope.Online = function(array){
var obj = $scope.findObjectByKey(array, 'status', 'Online');
return obj;
}
$scope.Offline = function(array){
var obj = $scope.findObjectByKey(array, 'status', 'Offline');
return obj;
}
函数$ scope.Online和$ scope.Offline根据状态Online和Offline对数据进行排序。
这是我的观点:
我将这两个复选框用作过滤器:
<input ng-true-value='Online' ng-false-value='' type="checkbox" ng-model="online" type="checkbox">Online
<input ng-true-value='Offline' ng-false-value='' type="checkbox" ng-model="offline" type="checkbox">Offline
<div ng-repeat="user in data|filter:online|filter:offline">
<p>{{user.name}}</p>
</div>
当前,当我单击与Online
对应的复选框时,它将显示状态为joseph
的用户john
和Online
,以及当我单击与{{1 }}显示状态为Offline
的用户joseph
和arnold
。这很完美。但是,当我单击两个过滤器按钮时,它仅显示Offline
,因为joseph
同时具有joseph
和Online
状态。因此,此处应用了Offline
操作。但是我想在这里进行AND
操作。因此,当我同时单击两个过滤器按钮时,在视图中应将输出分别为OR
,joseph
和arnold
。有什么提示我该怎么做?
答案 0 :(得分:0)
首先,考虑到您声明了一个具有两个具有相同名称的属性的对象,因此您的statarray
似乎是错误的,首先,我们应该将其移动到仅包含状态字符串ex的数组之类的东西。 ['Online', 'Offline']
。
仅使用最新选择的过滤器来执行过滤器功能。 您需要采用其他方法来汇总所选过滤器, 类似于创建过滤器obj。
filter = {
online: true,
offline: false
}
然后遍历以显示您的数据
$scope.filterArray = function(array, key, value) {
var filtered = [];
for (var i = 0; i < array.length; i++) {
var shouldInclude = false;
shouldInclude |= ($scope.filter.online && array[i].statarray.indexOf('Online') >= 0);
shouldInclude |= ($scope.filter.offline && array[i].statarray.indexOf('Offline') >= 0);
if (shouldInclude) {
filtered.push(array[i]);
}
}
return filtered;
};
这只是一种可能的方法,如果您能够使用ES6功能,这将变得更加简单。
答案 1 :(得分:0)
@ pravin navle- 您确定它的工作方式与下面的代码所述相同吗?因为当我尝试复制相同的功能时,它仅适用于脱机,不适用于在线以及“两者都选中”。