Почему это так?$interval
творил магию?
Да, это так.Он автоматически запускает цикл дайджеста AngularJS , что вы делаете «вручную» с помощью $scope.$apply()
(что также вызывает его).Это приводит к тому, что изменения отражаются в DOM.Если цикл дайджеста не запущен, AngularJS "не знает, какие изменения были внесены в модель, поэтому он не обновляет DOM".
(...) мне не нужносмотреть эти переменные?
Нет, если только вам не нужно получать уведомление, когда какая-либо из этих переменных изменила свои значения.Пока вы делаете все изменения в области видимости AngularJS, DOM всегда будет «уведомляться» (обновляться).
Как узнать, когда я что-то делаю в области видимости AngularJS?
Обычнокогда вы используете функции, предоставляемые такими службами, как $interval
и $timeout
, вы делаете вещи внутри области действия, потому что это обертки оригинала (setInterval
и setTimeout
) и автоматически запускать упомянутый цикл дайджеста, синхронизируя вещи между моделью и DOM.
Итак, наконец ,
Зачем нам нужно $scope.apply()
при изменении с консоли, но не иначе?
Поскольку с консоли вы делаете некоторые изменения вне области AngularJS и вам необходимо вызватьупомянутый цикл дайджеста самостоятельно.