2

Я хочу отфильтровать все объекты с количеством меньше 1, и мне нужно было создать собственный фильтр, чтобы достичь этого. Я надеялся, что решение проблемы было проще, чем пользовательский фильтр.Простой фильтр из объектов с определенным свойством целочисленное значение угловое

Ниже будет не работы:

<tr ng-repeat="product in products | filter: {quantity: '!0'}"> 

Это будет отфильтровывать 10,20 и так далее, в дополнение к 0.

я в конечном итоге с помощью этого пользовательского фильтра:

app.filter('quantityFilter', function() { 
    return function(products) { 
    var filtered = []; 
    angular.forEach(products, function(product) { 
     if(product.quantity > 0){ 
      filtered.push(product); 
     } 
    }); 
    return filtered; 
    }; 
}); 

HTML:

<tr ng-repeat="product in products | quantityFilter"> 

Есть ли более гладкое решение? Как (не работает):

<tr ng-repeat="product in products | filter: {quantity: >0}"> 
+2

Возможный дубликат [AngularJS: фильтр ng-repeat при значении больше] (http://stackoverflow.com/questions/24081004/angularjs-ng-repeat-filter-when-value-is-greater-than) – azad

ответ

2

Вместо того, чтобы писать отдельный фильтр, который вы можете использовать функцию предиката для фильтра. Это подробно описано в AngularJS documentation.

так что для вас это становится:

<tr ng-repeat="product in products | filter:noZeroQuantity"> 

и в контроллере:

$scope.noZeroQuantity = function(value, index, array) { 
    return value.quantity !== 0; 
} 

Я написал пример в jsfiddle.

Смежные вопросы