簡體   English   中英

使用ng-repeat時如何獲取數組的標准化值

[英]How to get normalized values for an array when using ng-repeat

我正在嘗試獲取與不同組關聯的一個數組的標准化值。

http://jsfiddle.net/k5Dvj/5/

我不想在原始數組項中添加新的內容,因此我將為每個組的標准化項返回新對象。

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM