[Перевод] Link, $observe и $watch функции в директивах, выполняемые в контексте AngularJS
При запуске своего кода внутри контроллера или сервиса не приходится беспокоиться о вызове $apply (), поскольку код выполняется внутри контекста Ангуляра. Под этим подразумевается, что Ангуляр понимает, что ваш код находится в процессе выполнения и выполнит грязную проверку (dirty-check) после завершения его работы. Когда же вы находитесь внутри директивы, мировоззрение Ангуляра чуть более ограничено; теперь директива должна заботиться о вызове $apply () (или вызове $apply () с чем-то вроде $timeout), когда необходимо сообщить Ангуляру об изменениях в модели представления (т. е. $scope). Однако, определить когда это нужно делать, немного сложнее, потому что некоторые аспекты директивы фактически выполняются внутри контекста Ангуляра. Если вы уже создавали свои собственные директивы, можно не сомневаться, что видели одно из двух сообщений:$apply is already in progress.$digest is already in progress.Читать дальше →