【问题标题】:nest ng-repeat generates much more items than expected嵌套 ng-repeat 生成的项目比预期的多得多
【发布时间】:2015-02-05 01:45:30
【问题描述】:

主要思想:

我想将引导网格系统与角度 ng-repeat 结合起来

方法:

我使用过滤器重新格式化 json 数据(一个包含很多对象的数组),比如 codepen 项目:

http://codepen.io/maggiben/pen/sfCnq ``` 过滤器('listToMatrix',函数(){ 返回函数 listToMatrix(list, elementsPerSubArray) {

    var matrix = [], i, k;
    console.log("hellowrld")
    for (i = 0, k = -1; i < list.length; i++) {
        if (i % elementsPerSubArray === 0) {
            k++;
            matrix[k] = [];
        }

        matrix[k].push(list[i]);
    }

    return matrix;
};

});

这是我的玉页面代码:

我的控制器代码:获取消息。

问题是我在页面上有更多的项目:

【问题讨论】:

    标签: angularjs angularjs-ng-repeat


    【解决方案1】:

    这个错误意味着 Angular 无法完成一个摘要循环。它的原因来自您的过滤器:每次 angular 将过滤器应用于您的列表时,都会创建一个新矩阵,因此 angular 将继续调用过滤器,直到它返回的内容与前一次迭代相同(这永远不会发生)。

    要修复它,您可以使用ng-repeat ... track by items.someProperty 跟踪矩阵的项目,因此在两次连续调用您的过滤器后,angular 将检测到此someProperty 没有更改并完成循环。

    解决此问题的另一种方法是为给定列表缓存过滤器的结果,因此下次 Angular 使用相同列表访问过滤器时,您将返回指向同一矩阵的指针。

    更多讲座可以参考这个问题(同题):Angular filter works but causes "10 $digest iterations reached"

    【讨论】:

    • 问题是:结果不正确。页面上显示的项目太多
    • 你面临一个 XY 问题,问题是我所说的,这导致了不受控制的行为。请注意,更简单的解决方案可能是一次性在控制器中对列表进行排序,然后删除过滤器:您还将获得更好的性能。
    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多