具有谓词函数的角度ng重复滤波器不能按预期工作

时间:2013-07-12 11:46:55

标签: angularjs predicate angularjs-ng-repeat

这是我第一次玩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 过滤器仅支持过滤数组,而非过滤。如果数组参数不是数组,则过滤函数返回...

1 个答案:

答案 0 :(得分:4)

嗯,这是我的错。 Ng-repeat过滤器仅支持数组,它只在文档中提及数组。并检查过滤器函数,如果数组参数不是数组,则返回....