AngularJS нг-повтор над массивом с фильтром - PullRequest
0 голосов
/ 23 января 2019

У меня есть массив объектов JS.

$scope.users = [{
    "name": "alice",
    "city": "london",
    "wards": [{
            "id": 1,
            "number": 24
        },
        {
            "id": 2,
            "number": 25
        },
        {
            "id": 3,
            "number": 26
        }
    ]
},
{
    "name": "bob",
    "city": "london",
    "wards": [{
            "id": 1,
            "number": 24
        },
        {
            "id": 2,
            "number": 25
        },
        {
            "id": 4,
            "number": 27
        }
    ]
}
]

У меня есть ng-repeat="user in users | filter: searchUser

Здесь searchUser может содержать name , city и номер отделения .Теперь поиск работает нормально для name и city , но не для подмассива объектов wards для поиска номера отделения .

Есть ли угловой способ, которым я мог бы достичь этого?

1 Ответ

0 голосов
/ 23 января 2019

Нет. Вам нужно написать свой собственный фильтр.

Вот пример jsfiddle, протестированный с поиском ввода

Алиса, Боб, Лондон, 26, 27

http://jsfiddle.net/1dura7m3/

Если вы хотите точное совпадение, измените -1 на 0

app.filter('myFilter', function(){
    return function(users, search){
    if(!search) return users;
    if(!users || !users.length) return users;
    searchInLower = search.toString().toLowerCase();
    users = users.filter(function(user){
        matches = false;
        if(user.name){
        usernameInLower = user.name.toString().toLowerCase();
        matches = matches || usernameInLower.indexOf(searchInLower) !== -1;
      }
      if(user.city){
        cityInLower = user.city.toString().toLowerCase();
        matches = matches || cityInLower.indexOf(searchInLower) !== -1;
      }
      if(user.wards && user.wards.length && !matches){
        for(var i = 0; i < user.wards.length; i++){
         ward = user.wards[i];
         for(var key in ward){
           objectKeyValueInLower = ward[key].toString().toLowerCase();
           matches = matches || objectKeyValueInLower.indexOf(searchInLower) !== -1;
         }
        }
      }

      return matches
    });
    return users;
  }
})
...