【问题标题】:Adding to index in angular filter添加到角度过滤器中的索引
【发布时间】:2015-03-31 17:49:48
【问题描述】:

出于各种原因,我使用 Angular 过滤器添加到将由 ng-repeat 使用的项目列表(基本上我需要将某些项目分组到表格的子标题下)。

app.filter('tableFilter',

function(){    
    return function(items){

        if (!items){
            return; 
        }

        var transformed = [];            
        for (var i = 0; i < items.length; i++){

            if (items[i].classid){

                if (i === 0 || items[i].classid !== items[i-1].classid){
                    transformed.push({classheader : true});
                }
                else{
                    items[i].classheader = false;
                }
            }
            transformed.push(items[i]);
        }                                
        return transformed;            
    }
}
);

好消息是它有效。坏消息是它会产生错误,第一个是:

[$rootScope:infdig]
http://errors.angularjs.org/1.2.23/$rootScope/infdig?p0=10&p1=%5B%5B%22fn%3…%7C%20''%3B%20newVal%3A%20%5C% 22%5C%22%3B%20oldVal%3A%20undefined%22%5D%5D

这与摘要循环中的无限循环有关。我怀疑通过添加到项目列表中,我正在破坏ng-repeat 使用的数组/$index

我可以在控制器/服务中转换项目列表,但这似乎不正确,因为这基本上只是为了演示。

【问题讨论】:

  • 您是通过$filter 提供程序调用控制器或服务内部的过滤器吗?或者在视图中使用它作为表达式?我认为后者是 ng-repeat 提到的情况 - 但不能确定。
  • @cerd 不,这是在 ng-repeat 中,基本上我想动态地向表中添加行。

标签: javascript angularjs


【解决方案1】:

不要更改过滤器上项目的属性。这将再次调用 forEach 循环。

删除这一行: items[i].classheader = false;

如果您需要在转换后的数组上更新类头标志,您可以更改代码以使用角度复制:

app.filter('tableFilter',

function() {    
    return function(items){

        if (!items){
            return; 
        }

        var transformed = [];            
        for (var i = 0; i < items.length; i++) {

            var item = angular.copy(items[i]);

            if (items[i].classid) {

                if (i === 0 || items[i].classid !== items[i-1].classid) {
                    transformed.push({classheader : true});
                } else {
                    item.classheader = false;
                }
            }
            transformed.push(item);
        }               
        return transformed;            
    };
}
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多