【问题标题】:ngRepeat through entries in map and filter entriesngRepeat 遍历 map 中的条目并过滤条目
【发布时间】:2014-02-14 18:27:06
【问题描述】:

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

我的 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 {}”。

【问题讨论】:

    标签: javascript angularjs angularjs-ng-repeat


    【解决方案1】:

    您将thingMap 视为名为@9​​87654323@ 的参数。如果你有一个空对象,那么你的东西 map 是空的。

    我创建了一个小的 plunk http://plnkr.co/edit/miipnB?p=preview,您可以在其中看到您的事物的哈希映射是正确传递的。

    【讨论】:

    • 好吧,也许我应该更清楚一点。在我添加这个过滤器之前,这个通过地图的迭代工作正常。地图不是空的。我在标记中同时引用键和值,它工作正常。我只是在使用这个过滤器时遇到了问题。
    • 那么没有足够的信息来回答。当我看到预期的行为时,我有一个例子。尝试将使用的角度版本更新到最新版本。我正在使用1.2.12
    • 哦,发送给过滤器的参数是MAP还是ENTRY?我会猜到这个条目,但你的例子似乎暗示它是地图本身。
    • 真的,你看到了入口地图。 Angular 过滤器旨在将某些值转换为另一个它并不总是过滤的值。
    • 名为 filter 的原生角度过滤器(有点混乱)仅用于过滤数组。您必须编写自己的过滤器来返回过滤后的地图
    【解决方案2】:

    我认为 just-boris 所说的是正确的,但我修改了他的示例以使其更加清晰。当你对一个对象使用 ng-repeat 时,整个对象都会被传递到过滤器中,而不是每个条目。

    我根据对象值中的“失败”属性使用 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;
      }
    }); 
    

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 2014-09-15
      • 2023-03-16
      • 2022-06-28
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多