2014-09-09 2 views
0
функция

Оповещение стреляя дважды, я не могу понять, почему: http://jsfiddle.net/ntzLrkmz/2/оповещения() дважды в простой угловой приложение

Это будет предупреждать, когда !number вставляется в <input type="number">

EDIT: спасибо всем Я буду играть с этой полезной информацией

+0

Digest цикл бежит дважды, предупреждения дважды. – tymeJV

+0

Значит, нет способа предотвратить это? просто не используя бдительность? », может ли кто-нибудь еще объяснить. Исследование, но было бы неплохо ответить – jobsmxli

+0

Угловые пробеги '$ digest', когда содержимое изменяется и должно быть привязано к представлению. Каждый раз, когда выполняется 'digest', он запускает вашу функцию. Не используйте функцию внутри своего повтора, вместо этого используйте событие« change »на входе, чтобы определить, является ли это числом или нет. – tymeJV

ответ

0

Это происходит потому, что угловые 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/

0

Перестраивая вашу логику и небольшие изменения в вашей нг-повторить вы можете решить эту проблему:

DEMO EXAMPLE

HTML:

<p ng-repeat="obj in array track by $index" ng-show="name.length">Welcome {{name}} !</p> 

JS:

angular.module('helloApp', []) 
    .controller('helloController', ['$scope', function ($scope) { 

    $scope.array = []; 

    $scope.populateArray = function (n, t) { 
     $scope.array = []; 
     if (t > 0) { 
      for (i = 0; i < t; i++) { 
       $scope.array.push(n); 
      } 
     } 
    } 

}]); 
+0

Кроме того, вместо выполнения проверки в функции области видимости вы можете использовать элемент формы, чтобы показать/скрыть сообщение об ошибке для вас: https://docs.angularjs.org/guide/forms –

Смежные вопросы