$ filter以自定义函数为角度

时间:2014-04-30 15:53:37

标签: angularjs angularjs-directive

如何使用自定义函数创建$ filter以确定是否匹配?

这是一个结构为的json样本:

     $scope.routes =[
    {
        "id": 0,
        "name": "Rosa Barnes",
        "origin": [
            {
                "address": [
                    {
                        "locality": "Madrid",
                        "country": "ES"
                    }
                ]
            }
        ]
    },
    {
        "id": 1,
        "name": "Wright Montoya",
        "origin": [
            {
                "address": [
                    {
                        "locality": "London",
                        "country": "UK"
                    }
                ]
            }
        ]
    },
    {
        "id": 2,
        "name": "Pearson Johns",
        "origin": [
            {
                "address": [
                    {
                        "locality": "London",
                        "country": "UK"
                    }
                ]
            }
        ]
    }
];

我想要一个传递一个国家/地区的$过滤器,可以在origin.address.country中匹配吗?

我证明了这段代码但不起作用:

       $scope.routesToShow = $filter('filter')($scope.routes, {origin.address.country: "UK"});

这里有一个演示: http://jsfiddle.net/86U29/43/

谢谢

2 个答案:

答案 0 :(得分:1)

您需要的是自定义过滤器。看起来您也可能需要调整数据结构。

看看这个:

app.filter('CustomFilter', function () {
    function parseString(propertyString) {
        return propertyString.split(".");
    }

    function getValue(element, propertyArray) {
        var value = element;
        propertyArray.forEach(function (property) {
            value = value[property];
        });
        return value;
    }

    return function (input, propertyString, target) {
        var properties = parseString(propertyString);
        return input.filter(function (item) {
            return getValue(item, properties) == target;
        });
    }
});

您可以使用此过滤器,如下所示:

$scope.routesToShow = $filter('CustomFilter')($scope.routes, 'origin.address.country', 'UK');

这是一个更新的jsfiddle(注意更新的数据结构):http://jsfiddle.net/moderndegree/86U29/44/

您可以在此处找到有关创建自定义过滤器的更多信息: https://docs.angularjs.org/guide/filter#creating-custom-filters

答案 1 :(得分:0)

<强>简单地

var filter = function(obj){
   return obj.origin[0].address[0].country === 'UK';
}
$scope.routesToShow = $filter('filter')($scope.routes, filter);