按AngularJS中名字的第一个字母过滤人员列表
Filter list of people by first letter of first name in AngularJS
我试图在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
不是一个函数。。。我是否错误地将参数传递给了筛选器?
您的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;
}
});;
是的,您错误地传递了要筛选的参数。默认情况下,过滤输入,即您的数组将作为第一个参数传递。
.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;
}
});
相关文章:
- 条件过滤列表显示在angularjs中
- 如何在AngularJS中按变量过滤列表
- 在 Javascript 中过滤列表
- Ember - 绑定到数组控制器中的过滤列表,然后添加新记录
- Vue.js 1.0.15 过滤列表无法读取未定义的属性
- 过滤列表并通过 ajax 请求数据
- Angularjs 使用选择值过滤列表数据
- 点击Angular过滤列表中的函数
- Angular.js可过滤列表,通过选择字段和可点击地图预定义值
- AngularJS-我应该如何处理多个动态下拉列表来过滤列表
- 如果过滤函数是异步的,如何使用lodash过滤列表
- 过滤列表与子字符串javascript
- AngularJS在数组的子元素上过滤列表
- 按首字母过滤列表项
- jQuery mobile:处理大型过滤列表
- JQuery排序和过滤列表
- 如何在过滤列表中使用第n子节点
- 通过侧边栏过滤列表
- 显示'没有项目'使用jQuery插件过滤列表项时的消息
- ng-从过滤列表中删除时重复动画