Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在ng repeat表中搜索(筛选)多个项目的简单方法?安格拉斯_Angularjs_Search_Angularjs Ng Repeat - Fatal编程技术网

Angularjs 在ng repeat表中搜索(筛选)多个项目的简单方法?安格拉斯

Angularjs 在ng repeat表中搜索(筛选)多个项目的简单方法?安格拉斯,angularjs,search,angularjs-ng-repeat,Angularjs,Search,Angularjs Ng Repeat,我正试图找到一种简单的方法,通过允许搜索多个内容,使搜索更深入。i、 e.如果我在搜索汽车,而不仅仅是输入Honda,我可以输入Honda,black,2001 这是我当前布局的框架 所以现在,当我在搜索框中输入信息时,它会给我一些信息,这些信息会出现在我的表格中的任何地方,这很好。然而,这通常会产生非常广泛的结果。我试图找到一种方法,允许用户通过多个词过滤来搜索更具体的项目 回到汽车的例子,如果我搜索Honda black 2001,这将不会给我任何东西,因为它查找整个字符串Honda bla

我正试图找到一种简单的方法,通过允许搜索多个内容,使搜索更深入。i、 e.如果我在搜索汽车,而不仅仅是输入Honda,我可以输入Honda,black,2001

这是我当前布局的框架

所以现在,当我在搜索框中输入信息时,它会给我一些信息,这些信息会出现在我的表格中的任何地方,这很好。然而,这通常会产生非常广泛的结果。我试图找到一种方法,允许用户通过多个词过滤来搜索更具体的项目


回到汽车的例子,如果我搜索Honda black 2001,这将不会给我任何东西,因为它查找整个字符串Honda black 2001,而不是Honda AND black AND 2001,我试图找到一种简单的方法,通过带角度的多个单词进行搜索,比如使用逗号分隔。在Angular中这样做简单吗?

我不确定它有多简单,但您可以使用一个过滤器和控制器函数来实现这种类型的过滤

以汽车为例,标记可能类似于:

  <input class="form-control" type="text" ng-model="q" placeholder="Search by year, make, model" />
  <br/>
  <ul>
    <li ng-repeat="car in cars | filter:filterCars">{{car.year}} {{car.make}} {{car.model}}</li>
  </ul>
这里可能没有介绍一些边缘情况,但您可以理解


工作

我不确定它有多简单,但您可以使用一个过滤器和控制器函数来实现这种类型的过滤

以汽车为例,标记可能类似于:

  <input class="form-control" type="text" ng-model="q" placeholder="Search by year, make, model" />
  <br/>
  <ul>
    <li ng-repeat="car in cars | filter:filterCars">{{car.year}} {{car.make}} {{car.model}}</li>
  </ul>
这里可能没有介绍一些边缘情况,但您可以理解

工作

  $scope.cars = [
  {
    year: 2006,
    make: 'BMW',
    model: 'M3'
  },
  {
    year: 2006, 
    make: 'BMW',
    model: 'Z4'
  },
  {
    year: 1992, 
    make: 'Mazda',
    model: 'Miata'
  },
  {
    year: 2008, 
    make: 'BMW',
    model: '750'
  }
  ];

  var match = function (item, val) {
    var regex = new RegExp(val, 'i');
    return item.year.toString().search(regex) == 0 ||
           item.make.search(regex) == 0 ||
           item.model.search(regex) == 0;
  };

 $scope.filterCars = function(car) {
    // No filter, so return everything
    if (!$scope.q) return true;
    var matched = true;

    // Otherwise apply your matching logic
    $scope.q.split(' ').forEach(function(token) {
        matched = matched && match(car, token); 
    });

    return matched;
  };