Интересно, можно ли выполнить какой-либо обратный вызов только один раз после оценки всех (или только некоторых) атрибутов директивы (без изолированной области). Атрибуты действительно хороши для передачи конфигурации в директиву. Дело в том, что вы можете наблюдать каждый атрибут отдельно и обратный вызов огня несколько раз.
В примере у нас есть директива без изолированной области видимости, которая учитывает два атрибута: имя и фамилия. После любого изменения action
выполняется обратный вызов:
HTML
<button ng-click="name='John';surname='Brown'">Change all params</button>
<div person name="{{name}}" surname="{{surname}}"></div>
JS
angular.module('app', []).
directive('person', function() {
return {
restrict: 'A',
link: function($scope, $elem, $attrs) {
var action = function() {
$elem.append('name: ' + $attrs.name + '<br/> surname: ' + $attrs.surname+'<br/><br/>');
}
$attrs.$observe('name', action);
$attrs.$observe('surname', action);
}
}
});
Plunker здесь.
Таким образом, эффект заключается в том, что после смены имени и фамилии за один клик дважды срабатывает обратный вызов action
:
name:
surname: Brown
name: John
surname: Brown
Итак, вопрос: может ли action
быть запущен только один раз с измененными именами и фамилиями?