这是我第一次玩AngularJS,实际上,我正在按照入门教程进行操作。在我看来,我会将教程脚本调整为我的理解,只需添加一些教程中没有的内容。
基本上,教程中使用的手机对象是:
{
"age": 1,
"id": "motorola-xoom",
"imageUrl": "img/phones/motorola-xoom.0.jpg",
"name": "MOTOROLA XOOM™",
"snippet": "The Next, Next Generation..."
}
我尝试做的是添加一个自动填充的选择框以便对列表进行排序:
<select ng-model="orderProp">
<option ng-repeat="(key, value) in phones[0]" value="{{key}}">
{{labels[key]}}
</option>
</select>
并向控制器添加了模型标签:
$scope.labels = {
"name": "Phone name",
"snippet": "Description",
"age": "Newest",
};
它按预期工作,除了我只想过滤上面的3个属性,所以我认为添加自定义谓词函数进行过滤很容易:
$scope.isPhonePropFilterable = function (propName) {
console.log('it DOES NOT get here!!!');
return propName == 'name' || propName != 'snippet' || propName != 'age';
};
并将其添加到ng-repeat
<option ng-repeat="(key, value) in phones[0] | filter:isPhonePropFilterable" value="{{key}}">
令我惊讶的是,它并不像我想象的那么容易,我的过滤功能没有被调用。
请在此处查看:plunker
我做错了什么吗?
已编辑: ng-repeat 过滤器仅支持过滤数组,而非过滤。如果数组参数不是数组,则过滤函数返回...
答案 0 :(得分:4)
嗯,这是我的错。 Ng-repeat过滤器仅支持数组,它只在文档中提及数组。并检查过滤器函数,如果数组参数不是数组,则返回....