[英]Search a value in a nested array of objects angular2
我最近开始研究angular2,因此想知道用例的正确方法。 我有这样的对象数组:
users : Array<Object> = [{
id: 1,
tags: [{
name: 'foo',
age: 21
}, {
name: 'aaa',
age: 23
}]
}, {
id: 2,
tags: [{
name: 'ball',
age: 53
}, {
name: 'ttt',
age: 43
}]
}, {
id: 3,
tags: [{
name: 'bar',
age: 32
}, {
name: 'fsf',
age: 11
}]
}]
我需要将此数据显示为表格并在其上提供搜索选项。 需要根据用户在搜索字段中输入的文本来过滤数据。 在搜索中输入的数据可以匹配该对象中的任何值。 我正在使用angular2 rc4。
在实施此搜索以及如何进行搜索时,我需要帮助。 我也在用lodash。 有什么办法可以利用它的功能。 (不使用jQuery)
请参阅此处如何将过滤器应用于* ngFor
基本上是实现返回所需内容的管道
在Lodash中,您可以使用_.filter
, _.some
和_.includes
:
var users = [{"id":1,"tags":[{"name":"foo","age":21},{"name":"aaa","age":23}]},{"id":2,"tags":[{"name":"ball","age":53},{"name":"ttt","age":43}]},{"id":3,"tags":[{"name":"bar","age":32},{"name":"fsf","age":11}]}]; var searchItem = "foo"; var filtered = _.filter(users, user => _.some(user.tags, tag => _.includes(tag, searchItem))); console.log(filtered);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.min.js"></script>
如果还要查找子字符串匹配项,则将字段映射到字符串,然后使用String#indexOf
:
var users = [{"id":1,"tags":[{"name":"foo","age":21},{"name":"aaa","age":23}]},{"id":2,"tags":[{"name":"ball","age":53},{"name":"ttt","age":43}]},{"id":3,"tags":[{"name":"bar","age":32},{"name":"fsf","age":11}]}]; var searchItem = "f"; var filtered = _.filter(users, user => _.some(user.tags, tag => _.some(tag, field => _.toString(field).indexOf(searchItem) != -1))); console.log(filtered);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.min.js"></script>
这是您在HTML中进行过滤的方式,还是要在控制器中进行过滤?
<li ng-repeat="user in users | filter: { tags: [{ age: search.age}] }">
我发现其他人正在做类似的事情:
控制器:
$scope.filteredUsers = $filter('filter')(users, function(value) {
return angular.forEach(value.tags, function(tag) {
return tag === $scope.searchTerm;
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.