Как отфильтровать массив в angularJS по длине подмассива

0

У меня есть такая модель

   public class City
   {
     public string Name {get; set;}
     public List<Classified> Classifieds {get; set;}
     public List<Area> Areas {get; set;}
   }

В моем контроллере angualrJs, мне понравилось ниже

$scope.cities = data; // I'm getting data (array of city).

Теперь я пытаюсь фильтровать cities на основе Classifieds(.length > 0) и Areas (.length > 0) как Areas (.length > 0) ниже.

<tr ng-repeat="city in cities | filter: { classifieds: '!!' }">    -- Not Working.

<tr ng-repeat="city in cities | filter: { areas: '!!' }">    -- Not Working.

Я хочу что-то вроде этого

<tr ng-repeat="city in cities | filter: { areas.length >0 }">    -- Tried this one as well. Not Working.
  • 0
    Можете ли вы показать содержимое массива данных?
  • 0
    Это в формате Json. из webapi я возвращаю Список <Город>.
Теги:

1 ответ

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

Если переменная $scope.cities содержит данные в следующем формате:

$scope.cities = [{name: 'a', classifieds: [], areas: []}, 
                 {name: 'b', classifieds: [], areas: [1]}, 
                 {name:'c', classifieds:[1], areas:[]}];

Вы можете создать настраиваемую функцию фильтра, такую как:

$scope.hasData = function(city) {
    return city.areas.length > 0 || city.classifieds.length > 0;
};

Применение:

  <td ng-repeat="city in cities | filter: hasData">{{city.name}}</td>

РЕДАКТИРОВАТЬ:

JSFiddle: https://jsfiddle.net/9sxeawr5/

  • 0
    Простой. Ищете так же. Я новичок в angularJs. Благодарю.

Ещё вопросы

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