【发布时间】:2019-05-11 01:15:05
【问题描述】:
我有两个过滤器,它们根据数据中的队列键过滤数据。 这是我的代码:
var app = angular.module('app', []);
app.controller('mainController', function($scope) {
// Data object
$scope.servers = [{
name: 'ServerA',
queue: '111'
},
{
name: 'Server7',
queue: '111'
},
{
name: 'Server2',
queue: '456'
},
{
name: 'ServerB',
queue: '456'
},
];
// Filter defaults
$scope.Filter = new Object();
$scope.Filter.queue = {
'PAV': '111',
'UAT': '456'
};
});
// Global search filter
app.filter('searchFilter', function($filter) {
return function(items, searchfilter) {
var isSearchFilterEmpty = true;
angular.forEach(searchfilter, function(searchstring) {
if (searchstring != null && searchstring != "") {
isSearchFilterEmpty = false;
}
});
if (!isSearchFilterEmpty) {
var result = [];
angular.forEach(items, function(item) {
var isFound = false;
angular.forEach(item, function(term, key) {
if (term != null && !isFound) {
term = term.toString();
term = term.toLowerCase();
angular.forEach(searchfilter, function(searchstring) {
searchstring = searchstring.toLowerCase();
if (searchstring != "" && term.indexOf(searchstring) != -1 && !isFound) {
result.push(item);
isFound = true;
}
});
}
});
});
return result;
} else {
return items;
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.3/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="mainController">
<label>show 111</label>
<input type="checkbox" ng-model="Filter.queue.PAV" ng-true-value='"111"' ng-false-value='"!111"' />
<label>show 456</label>
<input type="checkbox" ng-model="Filter.queue.UAT" ng-true-value='"456"' ng-false-value='"!456"' />
<hr />
<table width="100%" cellpadding="5">
<tr>
<th>Name</th>
<th>Queue</th>
</tr>
<tr ng-repeat="server in servers | searchFilter:Filter.queue">
<td>{{server.name}}</td>
<td>{{server.queue}}</td>
</tr>
</table>
</div>
</div>
过滤器完美运行。
但如果我有这样的数据,其中队列位于数组内:
$scope.servers = [
{name:'ServerA', queuearr:[{'queue' :'111'}]},
{name:'Server7', queuearr:[{'queue' :'111'}]},
{name:'Server2', queuearr:[{'queue' :'456'}]},
{name:'ServerB', queuearr:[{'queue' :'456'}]},
];
注意:queuerr 中可以有多个对象,例如 这个:
[{queue :'111'},{queue :'278'}]
如何更改我当前的代码,以便控件进入 queuerr 数组并匹配队列并相应地返回结果?
【问题讨论】:
-
searchfilter的可能值是多少?如果您包含您想要对数据类型执行的操作而不是仅提供代码并让我们从您的代码中对您正在尝试执行的操作进行逆向工程,那么可能更容易回答这个问题。 -
如果我理解正确你想看看 $scope.Filter.queue 的值是否在 $scope.servers 队列中并获取相应的服务器名称?
-
@hmr 如果你做 console.log(searchfilter) 输出是 { "PAV": "111", "UAT": "456" }
-
键
PAV和UAT有什么意义吗?您能否用您想要做什么来更新问题? -
@AlexG 我想看看 $scope.Filter.queue 的值是否在 $scope.servers queuearr 中
标签: javascript angularjs html angularjs-filter