使用单个文本框将严格搜索添加到多个字段

时间:2015-03-31 08:04:33

标签: javascript angularjs

有一个基本的角度应用,

HTML

  <input type="text" ng-model="txt.name" />
  <ul>
    <li ng-repeat="d in data | filter: txt:strict">
      <span>{{d.name}}</span>
      <br />
      <span>{{d.description}}</span>
      <br />
      <span>{{d.loremipsum}}</span>
      <br />
    </li>
  </ul>

JS:

var app = angular.module('app', []);

app.controller("mc", function($scope){

$scope.data = [{
  'name': 'asd',
  'description': 'jiocioasdiasidjpoasdko',
  'loremipsum': 'loremipsum'
}, {
  'name': 'qwe',
  'description': 'poqwpeqwpe',
  'loremipsum': 'loremipsum'
}, {
  'name': 'czxc',
  'description': 'asdasdasd',
  'loremipsum': 'loremipsum'
}]
});

我希望能够同时namedescription进行搜索,但不能按loremipsum进行搜索

我该怎么做?

Example on JS BIN

2 个答案:

答案 0 :(得分:1)

您可以创建自定义过滤器,请参阅下面的演示

var app = angular.module('app', []);

app.controller("mc", function($scope) {

  $scope.data = [{
    'name': 'asd',
    'description': 'jiocioasdiasidjpoasdko',
    'loremipsum': 'loremipsum'
  }, {
    'name': 'qwe',
    'description': 'poqwpeqwpe',
    'loremipsum': 'loremipsum'
  }, {
    'name': 'czxc',
    'description': 'asdasdasd',
    'loremipsum': 'loremipsum'
  }];
});

app.filter('customFilter', function() {
  return function(items, string) {
    var filtered = [];
    var stringMatch = new RegExp(string, 'i');
    for (var i = 0; i < items.length; i++) {
      var item = items[i];
      if (stringMatch.test(item.name) || stringMatch.test(item.description)) {
        filtered.push(item);
      }
    }
    return filtered;
  };
});
<html ng-app="app">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-controller="mc">
  <input type="text" ng-model="txt.name" />
  <ul>
    <li ng-repeat="d in data | customFilter: txt.name">
      <span>{{d.name}}</span>
      <br />
      <span>{{d.description}}</span>
      <br />
      <span>{{d.loremipsum}}</span>
      <br />
    </li>
  </ul>
</body>

</html>

答案 1 :(得分:0)

以下是使用自定义功能的示例: custom function solution

您可能希望在自定义函数中使用match而不是===。