Читаю http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/
директиву функции связи:
element.bind('click', function() {
scope.foo++;
scope.bar++;
scope.$apply();
});
лучший способ для использования $ применяются:
element.bind('click', function() {
scope.$apply(function(){
scope.foo++;
scope.bar++;
});
});
В чем разница? Разница в том, что в первой версии мы обновляем значения вне углового контекста, поэтому, если это вызывает ошибку, Angular никогда не узнает. Очевидно, что в этом крошечном примере игрушек это не будет иметь большого значения, но представьте, что у нас есть окно предупреждения, показывающее ошибки для наших пользователей, и у нас есть сторонняя библиотека, которая выполняет сетевой вызов, и она терпит неудачу. Если мы не будем обертывать его внутри $ apply, Angular никогда не узнает о сбое, и поле предупреждения не будет там.
Путаница: Почему угловая необходимость знать об ошибке, мне просто нужно показать ее пользователям. например, есть запрос ajax в ссылке fn директивы, мне просто нужно сказать, что произошло, если не удалось.
Оба одинаковы. Однако различие заключается в том, что 'fn' будет запускать цикл дайджеста, выполнив эту функцию. а другой будет запускать цикл дайджеста после выполнения инструкции. Но вместо этого я предпочел бы перейти на '$ timeout (function() {})' или '$ scope. $ applyAsync', который является самым безопасным способом применять цикл дайджеста –
Я знаю, что вы имеете в виду. Хорошо, я думаю, что автор может попросить запустить сетевой вызов в $ apply. – dylan