AngularJS - 过滤器没有价值

时间:2015-03-03 14:11:40

标签: angularjs angularjs-filter

1。这是我的supportDoc $范围:

var supportDoc = this;
......
supportDoc.docs = data;

enter image description here

2。我的重复:

data-ng-repeat="doc in supportDoc.docs | $uniqueFilter: doc.icon"

第3。我的过滤器:

/*@ngInject */
$uniqueFilter.$inject = [];
ng.module('app.Shared.Layout').filter('$uniqueFilter', $uniqueFilter);
function $uniqueFilter(input, key) {
    var unique = {};
    var uniqueList = [];
    for (var i = 0; i < input.length; i++) {
        if (typeof unique[input[i][key]] == "undefined") {
            unique[input[i][key]] = "";
            uniqueList.push(input[i]);
        }
    }
    return uniqueList;
     };

我的过滤器已经到达但无论我使用什么组合,例如

| $uniqueFilter: icon
| $uniqueFilter: doc.icon
| $uniqueFilter: supportDoc.docs.icon
等等,我仍然收到同样的错误:

TypeError:无法读取属性&#39;长度&#39;未定义的     at Object。$ uniqueFilter(http://localhost:3250/app/dashboards/_shared/layout/filters/unique.client.filter.js:10:34)     at Object.e [as invoke](http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:36:315)     at Object。$ get(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:34:268)     at Object.e [as invoke](http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:36:315)     在http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:38:110     在Object.d [as get](http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:36:13)     at $ get [as $ filter](http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:140:92)     at ib.filter(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:193:186)     在ib.filterChain(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:193:136)     在ib.statements(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:192:441

    <!-- ngRepeat: doc in supportDoc.docs | $uniqueFilter: icon 

数据在那里。删除过滤器允许显示数据属性,尽管有重复的过滤器用于删除。

有什么想法吗?提前谢谢。

3 个答案:

答案 0 :(得分:2)

过滤功能应该返回另一个功能。

module.filter('$uniqueFilter', function () { return $uniqueFilter; })

文档:https://docs.angularjs.org/tutorial/step_09

答案 1 :(得分:0)

尝试使用angular.forEach之类的东西来避免错误。

angular.forEach(input,function(row){
    if (typeof unique[row[key]] == "undefined") {
        unique[row[key]] = "";
        uniqueList.push(row);
    }
});

试试这个:

ngRepeat: doc in supportDoc.docs | $uniqueFilter: 'icon' 

答案 2 :(得分:0)

正如提到的Vinay K,您的过滤器就是为了看看:

/*@ngInject */
$uniqueFilter.$inject = [];
ng.module('app.Shared.Layout').filter('$uniqueFilter', $uniqueFilter);

function $uniqueFilter() {

    return function(input, key) {
        var unique = {};
        var uniqueList = [];
        angular.forEach(input,function(row){
            if (typeof unique[row[key]] == "undefined") {
                unique[row[key]] = "";
                uniqueList.push(row);
            }
        });
        return uniqueList;
    }
}