2014-12-02 74 views
0

我有一个看起来像的对象数组:过滤器由数组长度或AngularJS嵌套的对象属性

record in recordlist { 
    date : "02/12/2014" 
    time : "00.02.01" 
    car : "369" 
    pax: [ 
     { 
     name : "Ben" 
     chosen : true 
     }, 
     { 
     name : "Eric" 
     chosen : true 
     } 
    ] 
} 

到目前为止,当我列出使用NG-重复,我能够通过对象过滤(记录)财产。

过滤:

<input class="form-control" placeholder="Time" ng-model="search.time"> 

NG-重复:

<div ng-repeat="record in filteredRecords = (recordlist | filter: search)"> 

问题是当我要筛选的嵌套阵列(PAX)。我已经试过了,但目前为止没有运气:

<input ng-model="search.pax.name"> // filter by name property 

<input ng-model="search.pax.length"> // filter by array length 

任何提示?

回答

1

您可能需要使用自定义过滤器:

像这样的东西应该这样做:

<input ng-model="searchName"> 

<div ng-repeat="record in recordlist | filter: filterByNested"> 

而在你的控制器:

$scope.filterByNested = function (record) { 
    return record.pax.reduce(function (prev, curr, idx, array) { 
     return prev || curr.name == $scope.searchName; 
    }, false); 
}; 

基本上可以定义自定义过滤器如果正在搜索的元素位于嵌套数组中,则返回true。

将过滤器功能更改为基于长度工作也是微不足道的。

+0

考虑我的例子,在你的函数中将函数(记录){return record.pax.reduce ...? – 2014-12-03 06:51:00

+1

我已经编辑了一个更好的理解的答案,希望现在它更有意义。 – pedromarce 2014-12-03 07:00:33

+0

我稍后再试!谢谢!! – 2014-12-03 07:14:28