【问题标题】:AngularJS ng-repeat filter items based on date valueAngularJS ng-repeat 根据日期值过滤项目
【发布时间】:2014-07-22 22:51:51
【问题描述】:

我有一个简单的 ng-repeat:

<li ng-repeat="data in myData.Entries">

  {{ data.EntryNumber }} --

  <strong>From</strong> {{ data.InfoDetails[0].FromDt.substring(6, data.InfoDetails[0].FromDt.length - 2) | date:'MMM yyyy' }} <strong>to</strong>
  {{ data.InfoDetails[0].ToDt == null && 'current' || data.InfoDetails[0].ToDt.substring(6, data.InfoDetails[0].ToDt.length - 2) | date:'MMM yyyy'}}

</li>

哪些显示(如预期):

E1 -- From Nov 2011 to current
A1 -- From Jun 2010 to Nov 2011
X1 -- From Apr 2009 to Jun 2010
Z1 -- From Sep 2003 to Jun 2004 

我能否过滤此数据以仅包含 3 年以下(从当年开始)的项目。

我的 JS:

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';

  $scope.myData = {

    "Entries": [{
        "EntryNumber": "E1",
        "InfoDetails": [{
          "FromDt": "/Date(1320912000000)/",
          "ToDt": null,
          "RegisteredAs": {
            "SurName": "test",
            "Title": "MRS"
          },
          "RegisteredWith": "test"
        }]
      }, {
        "EntryNumber": "A1",
        "InfoDetails": [{
          "FromDt": "/Date(1276153200000)/",
          "ToDt": "/Date(1320912000000)/",
          "RegisteredAs": {
            "SurName": "test",
            "Title": "MR"
          },
          "RegisteredWith": "test"
        }]
      }, {
        "EntryNumber": "X1",
        "InfoDetails": [{
          "FromDt": "/Date(1239346800000)/",
          "ToDt": "/Date(1276153200000)/",
          "RegisteredAs": {
            "SurName": "test",
            "Title": "MR"
          },
          "RegisteredWith": "test"
        }]
      }, {
        "EntryNumber": "Z1",
        "InfoDetails": [{
          "FromDt": "/Date(1063177200000)/",
          "ToDt": "/Date(1086850800000)/",
          "RegisteredAs": {
            "SurName": "test",
            "Title": "MR"
          },
          "RegisteredWith": "test"
        }]
      }

    ]
  }

});

这是一个笨蛋:http://plnkr.co/edit/xscddt6AlhxUYIVIklQy?p=preview

【问题讨论】:

    标签: angularjs angularjs-scope angularjs-ng-repeat angular-filters


    【解决方案1】:

    分叉你的plnkr

    app.filter('filterList', function() {
        return function(items) {
            var retn = [];
    
            angular.forEach(items, function(item){
                if((new Date().getFullYear()) - (new Date(+item.InfoDetails[0].FromDt.substring(6, item.InfoDetails[0].FromDt.length - 2)).getFullYear()) >= 3){
                  retn.push(item); 
                }
            });
    
            console.log(retn);
            // return items.slice().reverse();
            return retn;
        };
    });
    

    希望这会有所帮助

    【讨论】:

    • @dhavlcengg - 谢谢,但输出列表没有更新?
    • 我比较过 fromdt 应该是 3 岁。如果将其更改为更大的值,您会在输出列表中找到差异。
    • 这个可以基于todt来代替吗?
    • 是的,可以。您可以根据自己的要求做任何事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2016-09-25
    • 2014-10-20
    • 2014-02-06
    相关资源
    最近更新 更多