Объясните странное поведение выражения Angular

0

Может кто-нибудь объяснить мне, почему я получаю дважды 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>   
  • 1
    Это означает, что ваш контроллер работает дважды. Я не уверен, что имя вашей функции совпадает с именем контроллера, или это может вызывать внешний фактор, такой как вызов страницы методом $ routeParam
Теги:

2 ответа

2
Лучший ответ

AngularJS оценивает все выражения на странице несколько раз в каждом цикле дайджест до тех пор, пока результат не станет стабильным.

То, что вы видите, совершенно нормально.

Но выражения не должны иметь побочных эффектов, таких как предупреждение или изменение значений.

0

Вот plunkr - https://run.plnkr.co/wFWMLiO9mqQu2LlU/

Он запускается дважды для вас, потому что событие (DOMContentLoaded) распространяется и на все родительские элементы. В этом случае он включает только <div>. Если вы вложите это под другие теги, он будет срабатывать больше раз.

Вы должны использовать угловую $ scope вместо прототипирования и использовать эту переменную.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню