property - Angularjs filtra el objeto anidado
ng switch angular 6 (3)
Tengo un objeto angular anidado como este. Hay forma de cómo filtrarlo para la propiedad anidada
<li ng-repeat="shop in shops | filter:search">
search.locations.city_id = 22
Estoy mostrando solo elemento principal pero quiero filtrar por ambos, como:
search =
category_id: 2
locations:
city_id: 368
[
name: "xxx"
category_id: 1
locations: [
city_id: 368
region_id: 4
,
city_id: 368
region_id: 4
,
city_id: 368
region_id: 4
]
,
name: "xxx"
category_id: 2
locations: [
city_id: 30
region_id: 4
,
city_id: 22
region_id: 2
]
]
La respuesta actualizada "Palabras como Jared" para usar expresiones regulares para verificar si contiene el término de búsqueda. De esta forma, comienza a filtrarse cuando ingresa 1 número para que no tenga que coincidir con la palabra completa
angular.forEach(shop.locations, function (location) {
if (checknum(location.city_id)) {
found = true;
}
});
function checknum(num){
var regx = new RegExp($scope.selectedCityId);
return regx.test(num);
};
Sí, puedes, si entendí tu ejemplo correctamente.
Dependiendo del tamaño de su colección, puede ser mejor calcular la colección que itera en ng-repeat
para que el filtro no lo haga constantemente a medida que cambia el modelo.
Básicamente haces algo como esto, si te entendí correctamente:
$scope.search = function (shop) {
if ($scope.selectedCityId === undefined || $scope.selectedCityId.length === 0) {
return true;
}
var found = false;
angular.forEach(shop.locations, function (location) {
if (location.city_id === parseInt($scope.selectedCityId)) {
found = true;
}
});
return found;
};
También puede filtrar así (versión 1.2.13+)
<li ng-repeat="shop in shops | filter: { locations: [{ city_id: search.locations.city_id }] }">