Angular group by和filter

时间:2014-10-09 00:28:28

标签: angularjs angular-filters

我正在尝试根据属性对我的集合进行分组,同时我想用一个属性过滤我的集合。

当我尝试以下内容时,

 <div data-ng-repeat="(group,parameter) in parameters | filter : { 'type' : '!GroupType' }| groupBy :'group'">
                        <fieldset>
                            <legend>{{group}}</legend>
                            <div data-ng-repeat="par in parameter">
                                <myfield ng-model="par.value" parameter="par" entry-map="entryMap"></myfield>
                            </div>
                        </fieldset>
                    </div>

我在控制台上遇到了很多错误,如下所示,

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: 

我的收藏品上没有任何手表。这样做的正确方法是什么。

1 个答案:

答案 0 :(得分:2)

我建议你不要使用&#39; groupBy&#39; $filter,使用this one instead

angular.module("sbrpr.filters", [])
.filter('groupBy', function () {
  var results={};
    return function (data, key) {
        if (!(data && key)) return;
        var result;
        if(!this.$id){
            result={};
        }else{
            var scopeId = this.$id;
            if(!results[scopeId]){
                results[scopeId]={};
                this.$on("$destroy", function() {
                    delete results[scopeId];
                });
            }
            result = results[scopeId];
        }

        for(var groupKey in result)
          result[groupKey].splice(0,result[groupKey].length);

        for (var i=0; i<data.length; i++) {
            if (!result[data[i][key]])
                result[data[i][key]]=[];
            result[data[i][key]].push(data[i]);
        }

        var keys = Object.keys(result);
        for(var k=0; k<keys.length; k++){
          if(result[keys[k]].length===0)
            delete result[keys[k]];
        }
        return result;
    };
});

另外,have a look at this post,在那里我讨论为什么你使用的实现实际上非常糟糕。

最后,请support my answer here。谢谢!