Фильтр AngularJS не будет фильтровать значения, равные 0

У меня есть следующий ввод для поиска:

<input type="text" ng-model="search.Kkz">

И у меня есть следующий ng-repeat:

<tr class="ListItem" ng-class-odd="'Odd'" ng-class-even="'Even'"
        ng-repeat="item in Prios | filter:search | filterMultiple:{Sprache:spracheSelectedItem} | orderBy:predicate:reverse | startFrom:currentPage*pageSize | limitTo:pageSize"
        ng-click="setSelectedRow(item)" ng-class="{'Selected': item == selectedRow}">

В настоящее время поле Kkz может иметь 2 значения (3000 и 0). Когда я ищу число 3000, он возвращает правильный список. Но когда я ищу значение «0», ничего не происходит, как будто оно не находит это значение в столбце таблицы, который я ищу.


person MartinK    schedule 24.03.2015    source источник
comment
Пожалуйста, разместите соответствующий код js из app.js   -  person 0aslam0    schedule 24.03.2015


Ответы (2)


По умолчанию фильтр ищет совпадение подстроки без учета регистра. Здесь он находит 0 в пределах 3000, так что и 3000, и 0 совпадают.

В случае простого массива строк вы можете использовать filter:search:true, в этом случае, когда поиск является объектом, создание собственного компаратора может помочь:

В HTML добавьте имя функции сравнения:

... | filter:search:compare | ...

В контроллере:

$scope.compare = function (actual, expected) {
  // !expected: All records pass when no search value is specified.
  // == instead of ===: Coerce the numbers from the array into strings to 
  //                    properly compare to the string from the input. 
    return (!expected || actual == expected);
};
person TijsH    schedule 24.03.2015
comment
Спасибо, сэр, за ваш быстрый и невероятно точный ответ! Это решило мою проблему. - person MartinK; 24.03.2015

Когда вы говорите, ничего не происходит. Что именно ты имеешь ввиду? Вы все еще получаете те же результаты или нет результатов?

Может ли это быть потому, что когда вы ищете 0 с фильтром, он также соответствует 3000?

Пример:

<!doctype html>
<html lang="en">
<head>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0-beta.6/angular.min.js"></script>
</head>
<body ng-app="">
  <div ng-init="values = [0,555,3000]"></div>

Search: <input ng-model="searchText">
<ul ng-repeat="value in values | filter:searchText">
  <li>{{value}}</li>
</li>
</table>
</body>
</html>

См. рабочий пример этого.

Если это не так, отправьте больше кода.

person aCa    schedule 24.03.2015