Angular:在嵌套对象中进行递归搜索的自定义筛选器
问题描述:
我对筛选嵌套对象存在一些问题。在select中选择过滤器参数(对象值),并在输入中输入一些在对象关键字中搜索它的文本。
试图用递归编写自定义筛选器进行深度搜索,但它不起作用。 input
是ng-repeat中的对象的参数,param1
用于select的ng型,而param2
用于输入的ng型。Angular:在嵌套对象中进行递归搜索的自定义筛选器
JS
.filter('personFilter', function($filter) {
return function(input, param1, param2) {
var output = {};
for (var prop in input) {
if (typeof input[prop] == 'object' || prop != param1 && input[prop] != param2) {
$filter('personFilter')(input[prop]);
} else {
output[key] = input[key];
}
}
return output;
}
这里的plunker:http://plnkr.co/edit/83lPNRWFy6wa9U2FkMfH?p=preview
我希望有人给我一些建议
答
对不起,只是肮脏的解决方案,没有时间来重构。 MB,从而节省时间给你
.filter('personFilter', function($filter) {
return function(input, recursive, search) {
return input.filter(filterFn);
function filterFn(obj){
var val, res;
for (var prop in obj) {
val = obj[prop];
if (typeof val == 'object' && recursive) {
recursive = false;
res = res || val.filter(filterFn).length;
recursive = true;
} else if(!recursive){
res = res || val == search;
}
}
console.log(res, obj, recursive, search);
return res;
}
}
与下面的标记
<body ng-controller="appCtrl">
<select ng-model="selectParameter" ng-options="item.value as item.key for item in parameter track by item.value">
</select>
<input ng-model="query" />
<div ng-repeat="person in object.node1.node2.persons | personFilter:selectParameter:query track by $index">
<!-- -->
<p>Person: {{person.name}}, Children: <span ng-repeat="child in person.children track by $index">{{child.name}}, </span></p>
</div>
</body>
和控制器初始化,如:
$scope.parameter = [
{value: false, key: 'Person Name'},
{value: true, key: 'Child Name'}
];
$scope.selectParameter = true;
好像数据格式不正确。你应该得到一个错误,例如'Uncaught SyntaxError:Unexpected token:',因为格式可能像'[{'node1':{node2:''}}]'not'['node1':{...}]' –