我在地图上有一个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 {}”。
答案 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;
}
});