【问题标题】:Angular JS Filter On dateAngular JS过滤器开启日期
【发布时间】:2015-03-24 22:14:10
【问题描述】:

我想知道是否有人可以帮助我过滤 ng-repeat 中的日期 我有一个文本字段,我在其中输入搜索文本以过滤表中的结果

以这个精简的例子`

 <tr id="credentialsData" ng-repeat="credential in credentials.data | filter:credentialsSearchText">
      <td>{{credential.createdDate | date:'medium'}}</td>
 </tr>`

credential.createdDate 在其余调用中以 2015-03-24T21:19:49Z 格式返回

当我附加中等日期过滤器时 - 它显示为 2015 年 3 月 24 日晚上 9:19:49

但是,当我搜索字符串 Mar 或 9: 时,我没有得到任何结果。 Angularjs 搜索基础对象并忽略过滤器。 我已经在网上阅读了其他选项,该人建议将不同的日期格式添加到 json 对象中,但不幸的是,这对我来说不是一个选项

对此的任何帮助将不胜感激

干杯 达米安

【问题讨论】:

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


    【解决方案1】:

    您可以为过滤器使用自定义函数。

    https://docs.angularjs.org/api/ng/filter/filter

     <tr id="credentialsData" ng-repeat="credential in credentials.data | filter:credentialsSearchText:compareCredentialDate">
          <td>{{credential.createdDate | date:'medium'}}</td>
     </tr>
    

    在你的控制器中,放一个

    $scope.compareCredentialDate = function(credential, expected) {
      // you have to inject '$filter' to use this:
      var dateFilter = $filter('date');
    
      // this is the value that "credential.createdDate | date:'medium'"
      // evaluates to:
      var formattedDateString = dateFilter(credential.createdDate, 'medium');
    
      // hypothetical matching method - you can implement whatever you
      // want here:    
      var isMatch = formattedDateString.indexOf(expected) >= 0;
    
      return isMatch;
    }
    

    【讨论】:

    • 谢谢 Smithecus - 我现在试试,让你知道我的进展情况
    • 这个函数可以写成一个过滤器,这样就可以全面使用了吗?
    • 您可以在 module.run() 回调中将该函数添加到 $rootScope 中,以便 compareCredentialDate 随处可用。对此的过滤器将比它的价值更麻烦 - 相信我。 :)
    • 谢谢,我试过了,但没用。当我在表中有超过 1 个字段时,它们会作为单独的值出现。不是每行 1 个对象。运行 credential.createdDate 不起作用。任何其他建议
    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 2014-11-17
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多