javascript - AngularJS。按数组过滤数组

标签 javascript angularjs

我有这样的数据结构:

$scope.data = [
  {
    title: "Title1",
    countries: ['USA', 'Canada', 'Russia']
  },
  {
    title: "Title2",
    countries: ['France', 'Germany']
  }
];

即每个项目都有国家/地区名称数组。

我这样显示这些数据:

<tr ng-repeat="dataItem in data">

我希望允许用户通过在输入中提供国家/地区列表来过滤此列表:

enter image description here

如何实现这一目标?

目前我做了这样的事情:

  <input ng-model="searchFilter.countries">
   ...
  <tr ng-repeat="dataItem in data | filter: searchFilter: true">

但显然它仅适用于 1 个国家/地区,不适用于使用逗号在输入中列出的国家/地区数组。

最佳答案

一个简单的解决方案,没有自定义过滤器:

HTML:

<input ng-model="countries" ng-list>

<tr ng-repeat="dataItem in data | filter:countryFilter">

JS:

$scope.countryFilter = function(dataItem) {
    if (!$scope.countries || $scope.countries.length < 1)
        return true;
    var matched = false;
    $scope.countries.filter(function(n) {
        matched = matched || dataItem.countries.indexOf(n) != -1
    });
    return matched;
};

<强> DEMO PLUNKR

关于javascript - AngularJS。按数组过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24653779/

相关文章:

javascript - AsyncStorage 返回意外错误

javascript - 不断轮询$.ajax请求问题

javascript - $q.All 在级联时没有等待所有 promise 完成

javascript - AngularJS:添加依赖项(内联数组与注入(inject))

javascript - 如果数组中已存在 id 则隐藏特定的 ng-option

AngularJS:反转复选框状态

javascript - 如何在 jQuery 委托(delegate)中引用 html 或文本?

c# - 使用 RegisterStartupScript、RegisterScriptBlock 等注册的脚本多久执行一次?

javascript - Selenium - 使用 NodeJS 中的 selenium-webdriver 库与现有浏览器 session 交互

javascript - AngularJS - 在使用 ng-click 运行功能之前需要输入字段