Angularjs: это неправильный способ написания?
<input ng-model="search" type="text">
<table ng-if="search.length > 2 || search.length == 0"
ng-init="somerows = getdata()">
<tr ng-repeat="row in somerows | filter:search">...</tr>
</table>
иногда это приводит к более быстрому мышлению
но так ли это?
1 ответ
Решение
Я думаю ng-init
выполняется только тогда, когда элемент скомпилирован, поэтому ваш getdata()
будет вызываться только при появлении таблицы. Вот что происходит при вводе:
- пустой
search
: таблица отображается,getdata()
называется - Введите "а": таблица скрыта,
getdata()
НЕ называется - Введите "b": таблица все еще скрыта,
getdata()
НЕ называется - Тип "с": таблица отображается,
getdata()
называется - Введите "d": таблица по-прежнему отображается так
getdata()
НЕ называется - И так далее,
ng-init
не будет выполнен, пока таблица не будет снова скрыта и повторно отображенаng-if
Если у вас есть 10 символов и CTRL+X, чтобы их вырезать, ваш поисковый запрос будет пустым, но getdata()
все еще не вызывается, потому что таблица все еще отображается, а ng-init не выполняется. Если вы вставите что-то в то getdata()
до сих пор не вызывается, потому что таблица видна и ng-init
уже был выполнен.
Я думаю, что было бы лучше посмотреть поисковый запрос и позвонить getdata()
затем:
$scope.$watch('search', function(newValue) {
if (typeof(newValue) === "string" &&
(newValue.length == 0 || newValue.length > 2)) {
$scope.getdata();
}
}