在AngularJS中使用单个输入来过滤多个字段

13 浏览
0 Comments

在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)。


有什么方法可以实现吗?

0
0 Comments

在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}}

通过以上步骤,我们实现了通过单个输入来过滤多个字段的功能。

0
0 Comments

在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 JolieAngelinaJolie甚至InA JOLIe这样的情况。如果你尝试先搜索姓氏,例如Jolie Angelina,它将无法正常工作。你可以通过在函数中创建一个第二个拼接字符串(例如reverseFullname),先将姓氏拼接在前面,然后再拼接名字,并将其与查询变量进行比较来解决这个问题。

以上就是关于在AngularJS中使用单个输入框来过滤多个字段的问题的原因和解决方法。你可以在下面的链接中找到上述解决方法的示例:

https://plnkr.co/edit/eGSMxheRdEUwHzdwRsTu?p=preview

0
0 Comments

在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"
    }]
}

这样做就像为列表创建了一个索引,非常好的方法。感谢分享这个思路。

0