javascript - 如何使用 AngularJS 对多个对象应用过滤器?

标签 javascript angularjs javascript-framework

我有如下定义的用户对象。

$scope.users = [{id: 1, name: 'Adam', friends: [{name: 'John', age: 21, sex: 'M'}, {name: 'Brad', age: 32, sex: 'M'}]}]

然后我有以下代码:

<div ng-repeat="user in users>
 <input type="text" ng-model="searchText">
 <div ng-repeat="friend in user.friends | filter:searchText">
  {{user.name}} {{friend.name}} {{friend.age}}
 </div>
</div>

现在,当我在文本框中键入文本:“searchText”时,我希望过滤器显示用户的姓名和 friend 的姓名/年龄。谁能帮我解决这个问题?

如果我是对的,那么我认为我需要为此创建一个自定义过滤器,或者有没有其他方法可以完成此操作?

最佳答案

因为您想同时过滤两件事—— friend 数组的一些属性和用户——您需要创建自己的 custom filter接受 2 个附加参数:

myApp.filter('myFilter', function() {
  return function(friends, searchText, username) {
    var searchRegx = new RegExp(searchText, "i");
    if ((searchText == undefined) || (username.search(searchRegx) != -1)) {
        return friends;
    }
    var result = [];
    for(i = 0; i < friends.length; i++) {
        if (friends[i].name.search(searchRegx) != -1 || 
            friends[i].age.toString().search(searchText) != -1) {
            result.push(friends[i]);
        }
    }
    return result;
  }
});

然后这样调用:

<div ng-repeat="user in users">
   <input type="text" ng-model="searchText">
   <div ng-repeat="friend in user.friends | myFilter:searchText:user.name">
      {{user.name}} {{friend.name}} {{friend.age}}
    </div>
</div>

":searchText:user.name"是您将附加参数传递给自定义过滤器的方式。

Fiddle .

关于javascript - 如何使用 AngularJS 对多个对象应用过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13834704/

相关文章:

javascript - 如何在 React 钩子(Hook)中附加到状态数组?

javascript - 无法使用 express.static 提供 json 文件

javascript-framework - ExtJS 工具栏无法正确呈现

javascript - 是否有提供时间增量功能的库?

javascript - 如何在 Jasmine 测试中释放 AudioContext

javascript - JQuery 如何知道何时收到新消息?

angularjs - 加载 Angular 指令模板异步

javascript - 有没有人实现了 javascript UI 框架,使用基于 OO/原型(prototype)的风格来编写代码?

javascript - 在 React 中获取子组件的高度

angularjs - 处理 AJAX 请求上的 SAML 重定向