Может кто-нибудь объяснить мне, почему я получаю дважды alert message
о следующем коде?
<div ng-app="scopeExample" ng-controller="MyController as ctrl">
<input id="box" ng-model="ctrl.num"> {{ctrl.show_num()}}
</div>
<script>
angular.module('scopeExample', [])
.controller('MyController', MyController);
function MyController() {
this.num=12;
}
MyController.prototype.show_num=function(){
alert(this.num);
};
</script>
AngularJS оценивает все выражения на странице несколько раз в каждом цикле дайджест до тех пор, пока результат не станет стабильным.
То, что вы видите, совершенно нормально.
Но выражения не должны иметь побочных эффектов, таких как предупреждение или изменение значений.
Вот plunkr - https://run.plnkr.co/wFWMLiO9mqQu2LlU/
Он запускается дважды для вас, потому что событие (DOMContentLoaded) распространяется и на все родительские элементы. В этом случае он включает только <div>
. Если вы вложите это под другие теги, он будет срабатывать больше раз.
Вы должны использовать угловую $ scope вместо прототипирования и использовать эту переменную.