AngularJS - Фильтровать вложенный объект в Javascript

0

У меня есть вложенный объект:

[
  {
    "$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.

Спасибо за вашу помощь.

Омар

Теги:
filter

2 ответа

1
Лучший ответ

Итак, какая часть того, что вы пробовали, не работает? Здесь plnkr, демонстрирующий фильтр как в html, так и в js.

$scope.filteredList = $filter('filter')($scope.list, {
  Field: {Name: 'City'}
});
  • 0
    Спасибо за ваш быстрый ответ o4ohel! На самом деле, как я могу динамически передать моей функции JS объект: Поле: {Имя: 'Город'} Например, из выбора / опции: <select ng-model = "filterBy" ng-init = "filterBy = 'EntityId '"> <option value =" EntityId "> Entity </ option> <option value =" Field.PostalCode "> PostalCode </ option> <option value =" Field.City "> Город </ option> </ select> <input type = "text" ng-model = "query [filterBy]" autofocus />
  • 0
    @ OmarAMRANI: Я обновил PLNKR с двумя оговорками: * Я не знаю, если это то, что вы искали. * Без понимания вашего полного намерения, это кажется слишком сложным решением.
Показать ещё 1 комментарий
1

Вы можете использовать $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';
});
  • 0
    Спасибо Борис, это тоже помогает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню