如何使用自定义函数创建$ 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/
谢谢
答案 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);