Это происходит потому, что угловые Evals списка, когда изменение переменного times
и $ diggest, чтобы построить ng-reapeat с новым значением. Вы должны использовать $ смотреть вместо:
angular.module('helloApp', [])
.controller('helloController', ['$scope', function ($scope) {
$scope.times = 1;
$scope.$watch('times', function (newValue, oldVaue) {
if (!angular.isNumber(newValue)) {
$scope.times = oldVaue;
alert('ENTER A VALID POSITIVE NUMBER PLEASE');
}
});
$scope.getTimes = function (n) {
if (angular.isNumber(n)) {
return new Array(n);
}
};
}]);
Рабочий пример здесь: http://jsfiddle.net/fals/75uv4ugb/
Digest цикл бежит дважды, предупреждения дважды. – tymeJV
Значит, нет способа предотвратить это? просто не используя бдительность? », может ли кто-нибудь еще объяснить. Исследование, но было бы неплохо ответить – jobsmxli
Угловые пробеги '$ digest', когда содержимое изменяется и должно быть привязано к представлению. Каждый раз, когда выполняется 'digest', он запускает вашу функцию. Не используйте функцию внутри своего повтора, вместо этого используйте событие« change »на входе, чтобы определить, является ли это числом или нет. – tymeJV