首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递对象属性数组以进行筛选

问传递对象属性数组以进行筛选
EN

Stack Overflow用户
提问于 2014-03-07 16:33:22
回答 1查看 4.1K关注 0票数 1

我有一个定制的角度过滤器,我试图使更通用。该筛选器将查看员工的集合,并根据自雇用员工以来已过的月数对列表进行筛选。我试图使过滤器更通用,这样我就可以在有日期但将有不同属性名称的其他列表上使用它(例如:在过去的xx个月中创建的过滤器发票)。如何传递要筛选的属性的名称,或者如何传递仅为date属性而不是整个对象的集合?

html

代码语言:javascript
复制
<html  ng-app="dateFilterTest">
    <head>

    </head>
    <body ng-controller="filterController">
        <select ng-model="maxLookBack">
            <option value="6">6 Months</option>
            <option value="12" selected="selected">1 Year</option>
            <option value="24">2 Year</option>
            <option value="999">All</option>
        </select>
        <ul>
            <li ng-repeat="person in people | DateAgeFilter:maxLookBack">{{person.name}}</li>
        </ul>
    </body>

    <script type="text/javascript" src="js/angular.min.js"></script>
    <script type="text/javascript" src="js/controllers/dateFiltercontroller.js"></script>
</html>

js

代码语言:javascript
复制
var app = angular.module('dateFilterTest', []);

app.filter('DateAgeFilter', function(){
    return function(items, maxage) {

        var minDate = new Date()
        minDate.setMonth(minDate.getMonth() - maxage);

        var result = [];
        for (var i=0; i<items.length; i++) {
          if (items[i].hireDate.getTime() > minDate.getTime()) {
            result.push(items[i]);
          }
        }

        return result;
    };
});

app.controller('filterController', function($scope){
    $scope.people = [
        {'name': 'Person 1',
         'hireDate': new Date('Jun 1, 2013')},
        {'name': 'Person 2',
         'hireDate': new Date('Aug 1, 2012')},
        {'name': 'Person 3',
         'hireDate': new Date('May 1, 2011')},
        {'name': 'Person 4',
         'hireDate': new Date('Jun 1, 2012')},
        {'name': 'Person 5',
         'hireDate': new Date('Mar 1, 2014')},
        {'name': 'Person 6',
         'hireDate': new Date('Mar 1, 2014')},
    ];
});

柱塞:

http://plnkr.co/edit/9zOWxJdMNg5zHz7qYf7c

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-07 16:45:28

您可以将属性名称作为附加参数传递给类似过滤器的so (使用额外的冒号分隔符):

代码语言:javascript
复制
DateAgeFilter:maxLookBack:'hireDate'

下面是更改过滤器以利用此功能的一个示例,并进行了2次更改:

1)附加参数-我在这里称它为field。

2)为了使用参数指定属性,我们将从点符号转换为括号符号--将items[i].hireDate.getTime()转换为items[i][field].getTime()。

代码语言:javascript
复制
app.filter('DateAgeFilter', function(){
  return function(items, maxage, field) {

    var minDate = new Date()
    minDate.setMonth(minDate.getMonth() - maxage);

    var result = [];
    for (var i=0; i<items.length; i++) {
      if (items[i][field].getTime() > minDate.getTime()) {
        result.push(items[i]);
      }
    }

    return result;
  };
});

更新柱塞

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22255573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档