2014-02-14 66 views
0

我在Map上爲每個迭代提供了一個「(鍵,值)」對的ngRepeat。我現在需要寫一個過濾器來限制我回來的一些結果。我定義了我的過濾器有兩個參數。我在ngRepeat調用中傳遞了一個參數,所以我應該期望得到兩個參數。我手動傳遞的參數是一個布爾值。在調試器中設置了這兩個參數,第二個參數爲「true」,這就是我傳遞的,所以我期望第一個參數對應於我的「(key,value)」對。我得到的第一個參數是一個基本上爲空的對象。ng在地圖和過濾條目中重複使用條目

在我的HTML參考如下:

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

的「thingMap」是由「名」屬性,其值是「東西」的對象鍵控的地圖。

這裏是我的過濾器定義,代表我的預期在第一個參數上看到:

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

當我進入調試器,「項」的值就是「對象{}」。

回答

0

我想剛纔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; 
    } 
}); 
1

您看到thingMap作爲名爲entry的參數。如果你有一個空的物體,那麼你的東西地圖是空的。

我創建了一個小塊http://plnkr.co/edit/miipnB?p=preview,你可以看到你的東西的散列圖是正確傳遞的。

+0

好吧,也許我本來應該更清晰。在我添加這個過濾器之前,通過地圖的這個迭代工作正常。地圖不是空的。我在標記中引用了鍵和值,並且它工作正常。我只是遇到了這個過濾器的問題。 –

+0

然後沒有足夠的信息來回答。當我看到預期的行爲時,我有一個例子。嘗試更新使用的角度版本到最新版本。我正在使用'1.2.12' –

+0

哦,是將參數發送到過濾器的MAP還是ENTRY?我會猜到入口,但你的例子似乎暗示它是地圖本身。 –