1。这是我的supportDoc $范围:
var supportDoc = this;
......
supportDoc.docs = data;
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
数据在那里。删除过滤器允许显示数据属性,尽管有重复的过滤器用于删除。
有什么想法吗?提前谢谢。
答案 0 :(得分:2)
过滤功能应该返回另一个功能。
module.filter('$uniqueFilter', function () {
return $uniqueFilter;
})
答案 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;
}
}