Я обнаружил проблему, когда вводил фильтр, а затем удалял его, коллекция продолжает фильтроваться и не отображает элементы с undefined или null значения в отфильтрованном термине.
Пример кода:
<div ng-app="App" ng-controller="AppController as app">
<p>
Filters
</p>
Name: <input ng-model="listFilters.name" type="text"/>
<br/>
Short Description: <input ng-model="listFilters.shortDescription" type="text"/>
<ul>
<li ng-repeat="person in app.persons | filter:{name: listFilters.name, shortDescription: listFilters.shortDescription}">
<p>{{person.name}}</p>
</li>
</ul>
</div>
Угловой код:
angular.module('App', []);
angular.module('App').controller('AppController', AppController);
function AppController() {
var ctrl = this;
ctrl.persons = [
{
name: 'Bill',
shortDescription: null
},
{
name: 'Sally',
shortDescription: 'A girl'
},
{
name: 'Jhon',
},
];
}
Рабочая скрипка: https://jsfiddle.net/89pkcww2/
Шаги, чтобы увидеть проблему, о которой я говорю:
- Фильтр по имени, список фильтруется.
- Сотрите фильтр, посмотрите, как снова отображается список (Билл, Салли, Джон).
- Фильтр по описанию, список отфильтрован.
- Сотрите фильтр, отображается только второе значение коллекции (Салли), а значения с неопределенными или нулевыми значениями - нет. Это фильтрация по "пустой строке".
Я предполагаю, что это поведение по умолчанию в фильтрах Angular, но... есть ли способ его изменить? Должен ли я делать свой собственный фильтр?
Я хочу фильтровать по обоим свойствам отдельно, collection | filter: filter.var
не служит для этой цели.
И это не то же самое, что фильтрация для отображения только ненулевых значений, это ближе к противоположному...