Kul*_*ary 6 angularjs angularjs-filter
我有一个JSON对象,如下所示
[{
"id": 1,
"firstName": "Jennifer",
"middleName": null,
"lastName": "Aniston",
"address": "New York City",
}, {
"id": 2,
"firstName": "Angelina",
"middleName": null,
"lastName": "Jolie",
"address": "Beverley Hills",
}, {
"id": 3,
"firstName": "Emma",
"middleName": null,
"lastName": "Watson",
"address": "London",
}]
Run Code Online (Sandbox Code Playgroud)
我正在使用ng-repeat在视图中填充这些数据.
<td ng-repeat="row in list | filter:filterBeauties">
{{row.firstName}} {{row.lastName}}
</td>
Run Code Online (Sandbox Code Playgroud)
现在我有一个输入框,我想用它来过滤这些名称.我想使用相同的输入框来过滤firstName然后过滤lastName而不过滤其他任何东西(例如地址).
<input type="text" placeholder="Filter" ng-model="filterBeauties.firstName">
Run Code Online (Sandbox Code Playgroud)
任何想法我怎样才能实现它?
试试这个小提琴.
本质上,我创建了一个子结构,用于在显示的数据结构中进行过滤,并仅对该属性进行过滤(例如'filterTerms'):
HTML:
<div ng-controller="MyCtrl">
<input type="text" ng-model="search.filterTerms">
<table border="1">
<tr ng-repeat="row in list | filter:search">
<td>{{row.firstName}} {{row.lastName}}</td>
</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.list = [{
"id": 1,
"address": "New York City",
"firstName": "Jennifer",
"middleName": null,
"lastName": "Aniston",
"filterTerms": {
"firstName": "Jennifer",
"middleName": null,
"lastName": "Aniston",
}
}, {
"id": 1,
"address": "New York City",
"firstName": "Jennifer",
"middleName": null,
"lastName": "Leela",
"filterTerms": {
"firstName": "Jennifer",
"middleName": null,
"lastName": "Leela",
}
}, {
"id": 2,
"address": "Beverley Hills",
"firstName": "Angelina",
"middleName": null,
"lastName": "Jolie",
"filterTerms": {
"firstName": "Angelina",
"middleName": null,
"lastName": "Jolie",
}
}, {
"id": 3,
"address": "London",
"firstName": "Emma",
"middleName": null,
"lastName": "Watson",
"filterTerms": {
"firstName": "Emma",
"middleName": null,
"lastName": "Watson",
}
}];
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将所有名称放在一个字段中来进一步简化此操作(请参阅此处的小提示:
HTML:
<div ng-controller="MyCtrl">
<input type="text" ng-model="search.filterTerm" />
<table border="1">
<tr ng-repeat="row in list | filter:search">
<td>{{row.first}} {{row.last}} {{row.address}}</td>
</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
var myApp = angular.module('myApp', []);
function MyCtrl($scope) {
$scope.list = [{
"id": 0, "first": "Jenny", "last": "Sorenson", "address": "123 W. Wallnut St.",
"filterTerm": "Jenny Sorenson"
},{
"id": 0, "first": "Susan", "last": "Hinkle", "address": "456 W. Doorbell Dr.",
"filterTerm": "Susan Hinkle"
},{
"id": 0, "first": "Rachel", "last": "Karlyle", "address": "789 W. Sunset Blvd.",
"filterTerm": "Rachel Karlyle"
},{
"id": 0, "first": "Gwen", "last": "Lippi", "address": "0 W. Silly Cir.",
"filterTerm": "Gwen Lippi"
}]
}
Run Code Online (Sandbox Code Playgroud)
考虑到您的用户拥有此表单:
{
"id": 2,
"firstName": "Angelina",
"middleName": null,
"lastName": "Jolie",
"address": "Beverley Hills"
}
Run Code Online (Sandbox Code Playgroud)
如果你想用你的名字,姓氏或两者同时搜索你的一个用户,你需要将它们连在一起.
$scope.query = '';
$scope.search = function (user) {
var query = $scope.query.toLowerCase(),
fullname = user.firstName.toLowerCase() + ' ' + user.lastName.toLowerCase();
if (fullname.indexOf(query) != -1) {
return true;
}
return false;
};
Run Code Online (Sandbox Code Playgroud)
true如果当前用户满足您的查询,false则此函数将返回.在函数内部,我建议将您的查询放在小写中,这样您就不必处理用户将在搜索输入中输入的大写字母.
这是HTML:
<input type="text" placeholder="Search" ng-model="query">
<table>
<tr ng-repeat="user in users | filter:search">
<td>{{user.firstName}} {{user.lastName}}</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
只有当您尝试搜索Angelina Jolie,甚至(毕竟为什么不是)时Angelina,此技术才有效.如果您尝试首先搜索姓氏,它将无法正常工作.您可以通过在函数中创建第二个全名来轻松修复它(例如a ),首先在lastName中连接,然后在firstName中连接,并像第一个全名字符串一样测试它.JolieInA JOLIeJolie AngelinareverseFullname
好吧,这就是我为解决这个问题所做的。
我在 json 对象中添加了一个新项目(使用angular.forEach函数)并通过它进行过滤。
$scope.list = beauties.query(function(response) {
angular.forEach(response, function(value, key) {
var fullName = value.firstName + ' ' + value.lastName;
$scope.list[key].fullName = fullName;
});
});
Run Code Online (Sandbox Code Playgroud)
输入框代码:
<input type="text" placeholder="Filter" ng-model="filterBeauties.fullName">
Run Code Online (Sandbox Code Playgroud)
NG-重复
<td ng-repeat="row in list | filter:filterBeauties">
{{row.firstName}} {{row.lastName}}
</td>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33575 次 |
| 最近记录: |