我试图通过AngularJS转发器中的第一个名字的起始字母来过滤人员列表。
转发器如下:
<li ng-repeat="person in people | orderBy: 'firstname' | firstLetter:'firstname':'A'">
<a ui-sref="people.details({ personId: {{person.id}} })">
<span class="list__icon"><img src="img/avatar.png"></span>
<span class="list__text">
<span class="list__text__name">{{person.firstname}} <b>{{person.lastname}}</b></span>
</span>
</a>
</li>
所以我按名字命名,然后使用名为firstLetter
的自定义过滤器:
.filter('firstLetter', function () {
return function (input, letter) {
input = input || [];
var out = [];
input.forEach(function (item) {
if (item.charAt(0).toLowerCase() == letter) {
out.push(item);
}
});
return out;
}
});
但是我收到charAt
不是函数的错误...我是否错误地将参数传递给过滤器?
答案 0 :(得分:2)
是的,您传递的参数未正确过滤。默认过滤输入,即您的数组将作为第一个参数传递。
.filter('firstLetter', function () {
return function (objects, input, letter) {
var out = [];
angular.forEach(objects,object){
var item = object[input];
if (item.charAt(0).toLowerCase() == letter.toLowerCase()) {
out.push(object);
}
});
return out;
}
});
答案 1 :(得分:2)
您的firstLetter
过滤器缺少额外的参数。第一个参数input
指的是重复通过的数组(在本例中为人)。第二个参数letter
实际上应该是过滤器声明的第三个参数。
.filter('firstLetter', function () {
return function (input, key, letter) {
input = input || [];
var out = [];
input.forEach(function (item) {
console.log('item: ', item[key][0].toLowerCase());
console.log('letter: ', letter);
if (item[key][0].toLowerCase() == letter.toLowerCase()) {
out.push(item);
}
});
return out;
}
});;