У меня есть вложенный объект:
[
{
"$id": "25",
"Field": {
"$id": "26",
"Key": "bb3927b1-fcbb-4fc4-8eff-24b7a20fad7b",
"EntityKey": "e904000c-b0b8-49ca-8a49-42a2e5b5d295",
"PostalCode": "12345",
"City": "My city1"
},
"EntityId": "MyEntity"
},
{
"$id": "27",
"Field": {
"$id": "28",
"Key": "ad4f2cb5-7397-474d-aed7-ff4bcc14d292",
"EntityKey": "e904000c-b0b8-49ca-8a49-42a2e5b5d295",
"PostalCode": "67890",
"City": "My city2"
},
"EntityId": "MyEntity"
}
]
На моей странице HTML я хотел бы отфильтровать по адресу PostalCode или City:
<select ng-model="filterBy" ng-init="filterBy='EntityId'">
<option value="EntityId">Entity</option>
<option value="Field.PostalCode">PostalCode</option>
<option value="Field.City">City</option>
</select>
<input type="text" ng-model="query[filterBy]" autofocus />
Использование функции в JavaScript:
$filter('filter')(array, expression, comparator)
Я вижу только EntityId, который работает, но не остальные поля.
PS: Я знаю, как использовать его в привязке HTML:
| filter: {Field: {City: 'my-value'}}
Мое намерение - сделать то же самое, используя фильтр в JavaScript.
Спасибо за вашу помощь.
Омар
Итак, какая часть того, что вы пробовали, не работает? Здесь plnkr, демонстрирующий фильтр как в html, так и в js.
$scope.filteredList = $filter('filter')($scope.list, {
Field: {Name: 'City'}
});
Вы можете использовать $filter
как это, чтобы соответствовать всем полям, глубоко:
$filter('filter')($scope.unfilteredList, {$: '67890'});
Или используйте функцию:
$filter('filter')($scope.unfilteredList, function(fullObject){
// assuming $scope.filterBy contains the string 'PostalCode'
return fullObject.Field[$scope.filterBy] === '67890';
});