Filtre les objets correspondant aux détails

Les fonctions fonctionnent bien, elles filtrent l'inventaire par code à barres et le fabricant. Je veux le faire comme un filtrage angularjs par défaut. Si je choisis le fabricant – LG et le code à barres – 112 et s'ils ne correspondent pas, il ne devrait pas afficher quoi que ce soit.

Mais pour l'instant, il s'affiche séparément, lorsque je clique sur la fonction de filtre, il filtre le code à barres lorsque le filtre Filter2 filtre le fabricant

$scope.filter = function(barcode) { var filtered = []; for(var i = 0; i < $scope.inventories.length; i++){ if($scope.inventories[i].barcode == barcode){ filtered.push($scope.inventories[i]); } } $scope.filtered_inventories = filtered; }; $scope.filter2 = function(manufacturer) { var filtered = []; for(var i = 0; i < $scope.inventories.length; i++){ if($scope.inventories[i].manufacturer == manufacturer){ filtered.push($scope.inventories[i]); } } $scope.filtered_inventories = filtered; }; 

Essaye ça

  $scope.filter = function (barcode, manufacturer) { var filtered = []; for(var i = 0; i < $scope.inventories.length; i++){ if($scope.inventories[i].barcode == barcode || $scope.inventories[i].manufacturer == manufacturer){ filtered.push($scope.inventories[i]); } } $scope.filtered_inventories = filtered; }; 

Vous pouvez créer un mode de filtrage plus général:

 $scope.filterByBarcode = function(list, key, value) { return list.filter(function(item){ return item[key] === value; }); }; 

Et lorsque vous filtrez, vous pouvez appeler:

 $scope.filtered_inventories = $scope.filter($scope.filter($scope.inventories, 'barcode', 112), 'manufacturer', 'LG') 

Mais pour simplifier que vous puissiez créer une fonction:

 $scope.filterByBarcodeAndManufacturer = function(barcode, manufacturer) { $scope.filtered_inventories = $scope.filter($scope.filter($scope.inventories, 'barcode', barcode), 'manufacturer', manufacturer); }