[英]How to get normalized values for an array when using ng-repeat
我正在嘗試獲取與不同組關聯的一個數組的標准化值。
我不想在原始數組項中添加新的內容,因此我將為每個組的標准化項返回新對象。
$scope.nomalizedItems = function (groupid) {
var groupItems = $scope.originalItems.filter(function (item) {
return item.groupid == groupid
});
var values = groupItems.map(function (item) {
return item.value;
});
var maxValue = Math.max.apply(null, values);
return groupItems.map(function (item) {
return {
id: item.id,
normalizedValue: item.value / maxValue
};
});
};
我相信這種邏輯確實很簡單,但是即使我在ng-repeat表達式中添加了“ track by item.id
”,angularjs總是怪“ [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
。
任何想法如何解決這個問題? 謝謝!
ngRepeat
指令不滿意。 您的代碼每次都會創建新對象。 消化過程一遍又一遍...
據我所知,在track by expression
重新創建實體擦除了它們內部的所有$$hashKey
屬性之后, track by expression
不應該使以前的實體與相應的新實體在角度上匹配。 該指令旨在告訴ngRepeat
指令如何構建此內部$$hashKey
以避免DOM元素創建浪費。
因此..您只能更改自己的項目,而不能創建新的項目:
groupItems.forEach(function (item) {
item.normalizedValue = item.value / maxValue;
});
return groupItems;
然后工作。
此外,您的過濾發生在每個摘要循環中。 為了提高性能,您可能希望在特定事件/觀察者回調中烘烤此數組。
UPDATE
實際上,如果您在ngRepeat
表達式之外烘烤此列表,則ngRepeat
! 我建議您使用ngRepeat
指令創建的子作用域為每個group
分配一個控制器,並在觀察者回調中烘烤此列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.