过滤日期不在angularjs中工作

时间:2014-08-27 14:33:58

标签: angularjs angularjs-ng-repeat angularjs-filter

鉴于要过滤的数据:

$scope.friends = [
    { "name": 'John',    "phone": '555-1212',    "age": 10, "name-phone-age":now.setMinutes(now.getMinutes() + 30) },
    { "name": 'Mary',    "phone": '555-9876',    "age": 19, "name-phone-age":now.setMinutes(now.getMinutes() + 30) },
    { "name": 'Mike',    "phone": '555-4321',    "age": 21, "name-phone-age":now.setMinutes(now.getMinutes() + 30) },
    { "name": 'Adam',    "phone": '555-5678',    "age": 35, "name-phone-age":now.setMinutes(now.getMinutes() + 30) },
    { "name": 'Julie',   "phone": '555-8765',    "age": 29, "name-phone-age":now.setMinutes(now.getMinutes() + 30) }
  ];

使用搜索输入框对任何字段进行过滤,但DATE字段除外;

例如

Search : John
Name    Phone Number    Age Some_Random_Date_Time

John    555-1212    10  2014-08-27 20:24:40 540

并搜索字符串2014,它是output data的一部分,如图所示,返回空结果

Name    Phone Number    Age Some Random Date Time
John    555-1212    10  2014-08-27 20:24:40 540
Mary    555-9876    19  2014-08-27 20:54:40 540
Mike    555-4321    21  2014-08-27 21:24:40 540
Adam    555-5678    35  2014-08-27 21:54:40 540
Julie   555-8765    29  2014-08-27 22:24:40 540


 Search : 2014
    Name    Phone Number    Age Some_Random_Date_Time

EXAMPLE LINK

1 个答案:

答案 0 :(得分:2)

日期搜索过滤器实际上运行正常。问题在于您的数据。过滤器处理绑定到它的数据。在您的示例中,只有您的显示器使用日期格式过滤器以特定格式显示日期。如果您使用搜索过滤器,它将在迭代的列表上工作(并记住日期格式过滤器不更新基础模型),因此要么创建一个可以格式化方式处理日期的自定义过滤器。但是在你的情况下,因为你需要显示格式化的日期,我只需要在模型中格式化日期。

  //Add a new property or update the existing property, here i am adding a new one.
  //Or just use friends.forEach
  angular.forEach(friends, function(friend){
     friend.formattedDate = $filter('date')(friend['name-phone-age'],'yyyy-MM-dd HH:mm:ss');
  }) ;

   $scope.friends = friends;

现在从视图中删除不需要的过滤器,而不是使用此字段。

 <td>{{friend.formattedDate}}</td>

<强> Plnkr