Angularjs 搜索在角度数据中不起作用

Angularjs 搜索在角度数据中不起作用,angularjs,angularjs-directive,angularjs-scope,angularjs-service,angularjs-filter,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Service,Angularjs Filter,我想格式化日期,然后从输入框中搜索。我正在尝试使用转换器,但由于某些原因,搜索不起作用,我的过滤器也不起作用 这是我的小提琴例子 这是我的密码 <div ng-app='app'> <h2>Todo</h2> <div ng-controller="TodoCtrl"> <form> <div class="form-group"> <div class="input-grou

我想格式化日期,然后从输入框中搜索。我正在尝试使用转换器,但由于某些原因,搜索不起作用,我的过滤器也不起作用 这是我的小提琴例子

这是我的密码

<div ng-app='app'>
  <h2>Todo</h2>
  <div ng-controller="TodoCtrl">
  <form>
      <div class="form-group">
        <div class="input-group">
          <div class="input-group-addon"><i class="fa fa-search"></i></div>
          <input type="text" class="form-control"  ng-model="search">
        </div>
      </div>
    </form>

   <div ng-repeat="item in data">
     {{item.date }}
   </div>
  </div>
</div>
当我输入日期时,它不会过滤,而且我的自定义过滤器也无法格式化日期


谢谢

搜索问题

如中的示例所示,您可以按如下方式使用搜索过滤器:

<div ng-repeat="item in data | filter:search:strict">
  {{item.date }}
</div>
app.filter('isoDate', function() {
  return function(input) {
    return new Date(input.split(' ').join('T'));
  }}
);
用法:

<div ng-repeat="item in data | filter:search:strict">
  {{item.date | isoDate | date : 'yyyy-MM-dd hh:mm:ss'}}
</div>
HTML:


{{item.date | isoDate | date:'MM/dd/y'}}
{{item.name}

记住:

  • 搜索过滤器中使用的日期格式和用于显示表格的日期格式之间保持一致
  • add
    else if
    应用对其他数据的搜索,如added
    else if(item.name.toLowerCase().indexOf(searchString)!=-1{result.push(item);}
    用于
    项目名称

在哪里使用自定义筛选器?请尝试此
{{{item.date}
这里是问题所在..当我在那里添加另一列时。搜索只适用于一列,不适用于全局。。。。这是TheFiddle in otherwords search仅适用于日期字段,如果我添加了另一个字段,搜索将失败。此外,当我搜索05/02或任何日期时……这也不起作用……请参见如上所示使用的过滤器仅影响日期显示方式,而不影响搜索,因此,如果您使用的日期格式不同于
yyyy-MM-dd hh:MM:ss
,即“MM/dd/y”搜索将以数据格式工作,则过滤器将影响显示方式。将会出现不匹配。搜索将适用于,即
05-02
,将显示
05/02/2012
。我将用自定义搜索的解决方案编辑答案。检查搜索
2012
Smith
<div ng-repeat="item in data | filter:search:strict">
  {{item.date | isoDate | date : 'yyyy-MM-dd hh:mm:ss'}}
</div>
app.filter('searchFor', function($filter) {
    return function(arr, searchString) {
        if (!searchString) {
            return arr;
        }
        var result = [];
        searchString = searchString.toLowerCase();
        angular.forEach(arr, function(item) {
            var itemDateInFormat = $filter('date')(new Date(item.date.split(' ').join('T')), 'MM/dd/y');
            if (itemDateInFormat.indexOf(searchString) !== -1) {
                result.push(item);
            } else if (item.name.toLowerCase().indexOf(searchString) !== -1) {
                result.push(item);
            }
        });
        return result;
    };
});
<tr ng-repeat="item in data | searchFor:search">
    <td> {{item.date | isoDate | date : 'MM/dd/y'}}</td>
    <td> {{item.name}}</td>
</tr>