AngularJS ng-repeat忽略过滤器功能

时间:2015-04-12 12:49:42

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

我想使用带有ng-repeat的过滤器。 不幸的是,它似乎忽略了附加到过滤器的函数的结果。

HTML:

<a ng-repeat="item in date track by $index | filter: filterFunction('2015-09-23',item)" class="item item-icon-left" >
      <div class="listcontent">{{title[$index]}}
          <br> <span class="subinfo">{{item}}</span>
      </div>   
     <i class="iconarrowmore ion-chevron-right"></i>
</a>

JS:

$scope.filterFunction = function (datestamp, element) {
    if (datestamp == element) {
        console.log(datestamp == element);
        return true;
    } else {
        console.log(datestamp == element);
        return false;
    }
};

当我使用console.log调试它时,它返回true或false,但每个项目仍然出现在列表中。

enter image description here

我真的不知道为什么这样做。

2 个答案:

答案 0 :(得分:1)

您的过滤功能为undefined。请注意,使用filter: filterFunction('2015-09-23',item)时,您会立即执行filterFunction并将其结果用作过滤器,即undefined,因为您的函数不会返回任何内容。

要解决此问题,请filterFunction返回新的过滤功能:

$scope.filterFunction = function(datestamp) {
    return function(element) {
        return datestamp == element;
    };
};

然后HTML部分将是相同的,只是您不需要传递项目:

ng-repeat="item in date track by $index | filter: filterFunction('2015-09-23')"

看到它正常工作:http://plnkr.co/edit/jLQbgGcLSAxwmiCcYZdP?p=preview

答案 1 :(得分:1)

好的,我找到了解决方案。

如果一个人使用“按索引追踪”并使用过滤器,则必须使用过滤器后面的过滤器:

ng-repeat="item in date | filter: filterFunction('2015-09-23') track by $index"

我希望能有所帮助。

干杯, 瓦伦丁