2015-11-05 7 views
0

Ниже я поставлю ссылку на мой пример в Plunker, чтобы показать вашу проблему. В ng-repeat Я использовал array(filtrowane) для хранения данных из результата фильтра, также я добавил ng-change на входе для отображения значения filtrowane.length в консоли. Переменный фильтрат определяется в контроллере, и после ввода чего-то. Он показывает разные значения в консоли и в представлении, можете ли вы сказать мне, почему?Angular -> ng-repeat filter array variable

PS. запустите консоль веб-браузера, и вы увидите разницу.

example Plunker

ответ

0

Когда вы меняете значение, вызывается сначала ng-change, затем начинается $ digest, который будет обновлять filtrowane. Если вы используете такие обозначения:

item in filtrowane = (tablica | filter:search) 

не используют filtrowane в контроллере. Html должен быть просмотрен, поэтому вам не следует объявлять какие-либо переменные там, которые вы используете в модели (js).

Посмотрите здесь: http://plnkr.co/edit/QAHlbuZqWX4szglvMP87?p=preview Этот код делает то же самое, что и у вас, но фильтрация выполняется в javascript. Немного сложнее, но все более понятно. (это также лучше для больших массивов)

+0

Спасибо за ответ, раньше я делал именно то же самое, что и вы, и он работает нормально. Мне просто интересно, если есть возможность сделать это за пределами контроллера. Поэтому я буду придерживаться этого решения. –

0

Использование ng-blur вместо ng-change

<input type="text" ng-model="search" ng-blur="sprawdzFiltr()"> 

Это связано с ng-change, вероятно, выполняется перед применением фильтра, так что старое значение будет принято.

+0

Спасибо за ответ, он работает, но мне нужно что-то вроде решения выше. –