ngRepeat通过map和filter条目中的条目

时间:2014-02-14 18:27:07

标签: javascript angularjs angularjs-ng-repeat

我在地图上有一个ngRepeat,它为每次迭代提供了一个“(键,值)”对。我现在需要在此编写一个过滤器来限制我得到的一些结果。我将我的过滤器定义为有两个参数。我在ngRepeat调用中传递了一个参数,所以我应该得到两个参数。我手动传递的参数是一个布尔值。在调试器中,这两个参数都已设置,第二个参数为“true”,这就是我传递的内容,所以我希望第一个参数对应于我的“(key,value)”对。我得到的第一个参数是一个基本上空的对象。

我的HTML中的引用如下所示:

<div ng-repeat="(name, thing) in thingMap | limitThings:showOnlyFailed">

“thingMap”是一个由“name”属性键入的地图,其值为“thing”对象。

这是我的过滤器定义,表示我期望在第一个参数中看到的内容:

thingModule.filter("limitThings", ['ThingsService', function(ThingsService) {
return function(entry, showOnlyFailed) {
    return !showOnlyFailed || ThingsService.anyFailuresInList(entry.thing);
};
}]);

当我进入调试器时,“entry”的值只是“Object {}”。

2 个答案:

答案 0 :(得分:1)

您将thingMap视为名为entry的参数。如果你有一个空对象,那么你的东西地图是空的。

我创建了一个小插件http://plnkr.co/edit/miipnB?p=preview,您可以在其中看到您的东西的哈希映射是通过核心传递的。

答案 1 :(得分:0)

我认为刚才boris说的是正确的,但我修改了他的例子,使其更清晰一点。当您对对象使用ng-repeat时,整个对象将被传递到过滤器,而不是每个条目。

我根据对象值中的'failed'属性对angular.forEach进行了一些过滤。

http://plnkr.co/edit/B2WOiSm2vZiQBKS1wlmJ?p=preview

app.filter('limitThings', function() {
  return function(entry, showOnlyFailed) {
    console.log("Entry: " + entry + " Only Failed: " + showOnlyFailed);
    var filteredMap = {};
    angular.forEach(entry, function(value, key)
    {
      if(!showOnlyFailed || !value.failed)
      {
        filteredMap[key] = value;
      }
    });
    return filteredMap;
  }
});