繁体   English   中英

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

[英]Adding strict search to multiple fields with a single textbox

有一个基本的角度应用程序,

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

我怎样才能做到这一点?

JS BIN上的示例

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

 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> 

这是使用自定义函数的示例: 自定义函数解决方案

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM