我创建了一个自定义过滤器,但它给了我一个错误 我在这里创造了一个小提琴:
我有这个用户数据:
data: [{
profile: {
firstName: 'John',
lastName: 'OConner'
}
}, {
profile: {
firstName: 'Smith',
lastName: 'OConner'
}
}, {
profile: {
firstName: 'James',
lastName: 'Bond'
}
}]
我需要通过此
按嵌套的obj - 配置文件进行过滤data: [{
column: {
label: 'firstName',
}
}, {
column: {
label: 'lastName',
}
}]
我可以过滤,但却给了我这个错误:
这是我的过滤器:
myApp.filter('testFilter', ['$filter',
function($filter) {
return function(items, selectedFilter) {
var returnArray = items;
var filtered = [];
var process = {};
process.filtered = [];
process.loop = function(obj, key) {
var filtered = [];
this.obj = obj;
this.key = key;
// console.log('obj--> ', obj);
// console.log('key--> ', key);
filtered = filtered.concat($filter('filter')(items, process.superFilter));
if (filtered.length > 0) {
process.filtered = filtered;
}
};
process.superFilter = function(value) {
var returnMe;
var originalValue = value.profile[process.key];
if (typeof(value) === 'String') {
originalValue = originalValue.toLowerCase();
}
if (originalValue === process.obj) {
console.log('found');
returnMe = value;
return returnMe;
}
};
if (Object.getOwnPropertyNames(selectedFilter).length !== 0) {
angular.forEach(selectedFilter, function(obj) {
filtered = filtered.concat($filter('filter')(items, obj));
});
returnArray = filtered;
// console.log('selectedFilter ', selectedFilter);
}
return returnArray;
};
}
]);
不允许在转发器中重复。使用'跟踪'表达式以指定唯一键。我该如何解决这个问题?
答案 0 :(得分:2)
您需要使用track by,如错误所示。如果您没有可以使用的唯一密钥,则可以使用$index
。
ng-repeat='talent in talents.data | testFilter:filterInput track by $index'
以下是您的代码的工作示例:http://jsfiddle.net/hwT4P/