В оригинальной версии моего контроллера я добавил логотип заголовка к РОМ, а затем был в состоянии удалить и заменить его чем-то другим, когда функция была вызвана, как этонаблюдать событие щелчка в директиве
$scope.addHeader('.blahClassName');
$scope.removeHeaderFunction = function(){
$('.blahClassName).html('');
//do other stuff
}
Это работало отлично. Тем не менее, я прочитал, что лучше не делать манипуляции DOM в контроллере, поэтому я создал директиву, как этот
<div class='MyCtrl as vm'>
<div header-dir myscope="vm" removeheaderflag="{{vm.headerflag}}"></div>
Затем внутри функции связи моей директивы, добавить логотип заголовка и слушать изменения на флаге, чтобы удалить его, как этот
link: function(scope, elem, attrs){
scope.myscope.addHeader('.blahClassName'); //calling the function addHeader on the controller available through myscope
attrs.$observe('removeheaderflag', function(){
angular.element(elem[0].querySelector('.blahClassName')).html('');
});
}
Тогда в контроллере, я поставил $scope.headerflag = null;
на странице загрузки, и установите его верно в removeHeaerFunction
с намерением, что это устранило бы заголовок только когда флаг был установлено в true
$scope.removeHeaderFunction = function(){
$scope.headerflag = true;
}
Однако фактическое поведение моего кода заключается в том, что логотип добавляется и удаляется немедленно, независимо от того, для чего установлен $scope.headerflag
. Другими словами, код внутри $attrs.observe('removeheaderflag', ...
запускается немедленно.
Вопрос: как задержать ход кода в том, что наблюдатель или иным образом получить поведение, которое я пожелаю внутри директивы, то есть в основном, чтобы иметь возможность удалить что-то на событие щелчка
Вы используете стандартные события click или ng-click? Похоже, что вы не устанавливаете значения контроллера внутри углового жизненного цикла, поэтому изменения не сразу отражаются. – Enzey