AngularJS中的多个条件过滤器

时间:2014-12-28 11:44:35

标签: javascript angularjs

我有一个显示对象集合的ng-repeat列表。 我实现了一个过滤器,使列表只显示今天插入的对象。它看起来像这样:

<div class="row msf-row" 
     ng-repeat="record in recordlist | filter: record.date = dateJson">

这太棒了。我的问题是,我想要显示今天记录的两个对象,以及没有财产到达的记录(因为它们可能已经在昨天引入,但它们需要标记为已到达)。

我已经尝试了这个但直到今天00.00才知道它是否正确。

<div class="row msf-row" 
     ng-repeat="record in recordlist | 
                filter: record.date = dateJson ||  
                        record.date != dateJson && !record.arrival">

这有意义吗?

2 个答案:

答案 0 :(得分:1)

当你的标记中的表达式开始变得过度时,是时候重构了。您应该在控制器中定义一个执行所需检查的功能:

$scope.shouldShow = function(record) {
    return record.date == dateJson ||
           (recode.date != dateJson && !record.arrival);
}

(注意:这个条件是多余的;你可以缩短它):

    return record.date == dateJson || !record.arrival;

然后在过滤器中使用它:

<div class="row msf-row" ng-repeat="record in recordlist | filter:shouldShow">

这样您就可以在不编辑视图的情况下更新逻辑。

答案 1 :(得分:0)

如果您要创建自定义过滤器,可以试试这个。在这里我假设
app = angular.module('yourModuleName', [])app = angular.module('yourModuleName')(之后,如果您之前已经实例化过您的模块)

<div class="row msf-row" ng-repeat="record in recordlist | customFilter:dateJson">

app.filter('customFilter', function(){
    return function(records, dateJson){
        return records.filter(function(item, index, array){
            return item.date == dateJson || (item.date != dateJson && !item.arrival);
        });
   }
})

免责声明:我还没有测试过此代码。