我有一个深层嵌套的对象。我有一些记录,其中包含2个显示对象属性键的字段。我也有选择需要按对象的属性搜索记录并输入按对象的键搜索。因此,如果我选择option1并输入一些文本输入,它将在第一个字段中显示匹配(而不是第二个!)。第二场也类似。
我如何努力实现:
我写了一个过滤器http://plnkr.co/edit/z9DEmfYz2grW9UonLcFK?p=preview
.filter('appFilter', function() {
return function(value, select, input) {
var result = [];
input = input.toLowerCase();
var reg = new RegExp(input,'g');
if (angular.isArray(value)) {
if (input === '' || $scope.isFiltering) {
return value;
} else if (select.value === 'Sequence') {
for (let i = 0; i < value.length; i++) {
if (value[i].Sequence.toLowerCase().match(reg)) {
result.push(value[i]);
}
}
return result;
} else if (select.value === 'ID') {
for (let i = 0; i < value.length; i++) {
if (angular.isArray(value[i].Document)) {
for (let j = 0; j < value[i].Document.length; j++) {
if (value[i].Document[j].ID.toLowerCase().match(reg)) {
result.push(value[i]);
}
}
}
}
return result;
} else {
console.log('error');
}
}
}
})
在控制器中,我设置选择第一个选项:$scope.selectParameter = $scope.parameter[0];
在调试中我设置输入参数一些值(例如123)。
所以我通过包含123值的第一个字段搜索记录。结果找到并推送对象。但在浏览器中显示任何内容
问题是什么?我无法避免使用&#39;?&#39;我的选择中的值:(
已更新
几乎解决了我的问题:http://plnkr.co/edit/z9DEmfYz2grW9UonLcFK?p=preview
它按适当的字段和输入值进行过滤。但是我遇到了另一个麻烦
当输入为空时,它不显示任何记录。第二个是当我选择第二个选项(ID)过滤器复制一些记录时
此外,我尝试通过单击复选框关闭过滤器而不清除输入文本。
这是我想要做的,但它不起作用:
else if (input === '' || $scope.isFiltering) {
return value;
}
对于复选框输入, $scope.isFiltering
为ng-model
答案 0 :(得分:2)
我尝试使用angulars默认过滤器。我不确定这是不是你想要的,但也许它有点帮助。
.filter('appFilter', function($filter) {
return function(value, select, input) {
if( !angular.isDefined(input) || input.length < 1) {
return value;
}
// Angulars "filter" lets you pass in a object-structure to search for nested fields.
var query =
(select.value === 'Sequence') ?
{Sequence:input} : {Document:{ID:input}};
return $filter('filter')(value, query);
}
})