在AngularJS中使用单个输入来过滤多个字段
在AngularJS中使用单个输入来过滤多个字段
我有一个如下所示的JSON对象:
[{
"id": 1,
"firstName": "詹妮弗",
"middleName": null,
"lastName": "安妮斯顿",
"address": "纽约市"
}, {
"id": 2,
"firstName": "安吉丽娜",
"middleName": null,
"lastName": "朱莉",
"address": "比佛利山庄"
}, {
"id": 3,
"firstName": "艾玛",
"middleName": null,
"lastName": "沃特森",
"address": "伦敦"
}]
我使用ng-repeat来将这些数据填充到视图中。
{{row.firstName}} {{row.lastName}}
现在我有一个输入框,我想用它来过滤这些名字。我想使用同一个输入框来过滤firstName,然后再过滤lastName,并且不过滤其他任何内容(例如address)。
有什么方法可以实现吗?
在AngularJS中,有时需要通过单个输入来过滤多个字段。下面的内容展示了解决这个问题的方法。
首先,我们通过使用`angular.forEach`函数向JSON对象中添加了一个新的项目,并通过它进行了过滤。
$scope.list = beauties.query(function(response) { angular.forEach(response, function(value, key) { var fullName = value.firstName + ' ' + value.lastName; $scope.list[key].fullName = fullName; }); });
接下来,我们在输入框中添加了过滤器。
最后,我们使用`ng-repeat`指令来显示过滤后的结果。
{{row.firstName}} {{row.lastName}}
通过以上步骤,我们实现了通过单个输入来过滤多个字段的功能。
在AngularJS中,如果你想通过用户的名字、姓氏或者两者同时进行搜索,你需要将它们拼接在一起。下面是一个解决方法:
首先,你需要在控制器中定义一个查询变量$scope.query
,并将其转换为小写,以便统一大小写。然后,在搜索函数中,你需要将用户的名字和姓氏拼接在一起,并将其转换为小写,以便与查询变量进行比较。如果拼接后的字符串中包含查询变量,函数将返回true
,否则返回false
。
下面是具体的代码示例:
$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; };
在HTML中,你需要使用ng-model
将查询变量与输入框进行绑定,并使用ng-repeat
指令来遍历用户列表并进行过滤显示。下面是具体的HTML代码示例:
{{user.firstName}} {{user.lastName}} |
这种方法只适用于搜索Angelina Jolie
、Angelina
、Jolie
甚至InA JOLIe
这样的情况。如果你尝试先搜索姓氏,例如Jolie Angelina
,它将无法正常工作。你可以通过在函数中创建一个第二个拼接字符串(例如reverseFullname
),先将姓氏拼接在前面,然后再拼接名字,并将其与查询变量进行比较来解决这个问题。
以上就是关于在AngularJS中使用单个输入框来过滤多个字段的问题的原因和解决方法。你可以在下面的链接中找到上述解决方法的示例:
在AngularJS中,有时候我们需要通过一个输入框来同时筛选多个字段。下面的代码给出了两个解决这个问题的方法。
第一个方法是在数据结构中创建一个子结构,只在该属性上进行筛选。具体代码如下:
HTML:
{{row.firstName}} {{row.lastName}}
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", } }]; }
第二个方法更简单,将所有的姓名放在一个字段中进行筛选。具体代码如下:
HTML:
{{row.first}} {{row.last}} {{row.address}}
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" }] }
这样做就像为列表创建了一个索引,非常好的方法。感谢分享这个思路。