switch property limitto example array angularjs filter angularjs-filter

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

JSfiddle

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.

http://jsfiddle.net/suCWn/

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 }] }">