2013-12-23 3 views
2

У меня есть фильтр так:номера Угловой JS Фильтрация

<tr ng-repeat="c in CategoryList | filter: {CategoryOption.CategoryOptionID: FilterByType}"> 

Значение: FilterByType получает значение из выпадающего списка не показано.

Это работает просто отлично, за исключением случаев, когда значение FilterByType равно 2, тогда оно будет фильтровать результаты для отображения 2, 22, 32, 42 и т. Д. Это не сравнение истинных чисел. Это больше похоже на string.contains kinda.

Любая идея, как я могу заблокировать это?

ответ

2

Вы можете использовать функцию с фильтром, как это :

<tr ng-repeat="c in CategoryList | filter: myCustomFilter"> 

А затем определите функцию, которая делает любое сравнение, которое вы хотите:

$scope.myCustomFilter = function(element) { 
    if ($scope.FilterByType) { 
     return element.number === parseInt($scope.FilterByType); 
    } 
    return true; 
} 

Это обеспечивает полный контроль над фильтром и также поможет предотвратить некоторые странное поведение с типами входных (текст, числа и т.д.) не соответствует фактическому типу в модели.

+0

Работал отлично. Спасибо! – AnthonySG

3

Добавить true в качестве третьего параметра в выражении фильтра, чтобы включить строгое сравнение:

<tr ng-repeat="c in CategoryList | filter: {CategoryOption.CategoryOptionID: FilterByType}:true"> 

Примечание: Это требует AngularJS v1.1.3 +

+0

Я попробовал этот метод раньше, но по-прежнему получать такое же странное поведение. – AnthonySG

0

Добавление :true для меня.

ng-repeat="proj in projectList | filter: {ID: project.p_id} :true" 

Благодаря

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