2013-04-09 3 views

ответ

82

Да. Вы можете использовать attr.$observe, если вы используете интерполяцию по атрибуту.

Но если это не интерполированное атрибут, и вы ожидаете, что это будет изменено где-то еще в приложении (что крайне не рекомендуется, прочитать Common Pitfalls), чем вы можете $watch функция возврата:

scope.$watch(function() { 
    return element.attr('class'); 
}, function(newValue){ 
    // do stuff with newValue 
}); 

Во всяком случае, вероятно, что лучший подход для вас изменит код, который изменит класс элемента. В какой момент это изменилось?

+1

Мне просто нужна директива, ограниченная атрибутом, и когда я добавляю директиву любому произвольному элементу, она должна быть способна определить, когда изменились другие атрибуты этого произвольного элемента. В моем случае это «класс» – Agzam

+0

, изменяющий код, который меняет класс, будет для меня каким-то неприемлемым решением, хотя, вероятно, это самая правильная вещь. Мне все же нужно как-то перехватить момент, когда он изменит класс – Agzam

+0

Затем перейдите с '$ watch', который я опубликовал. Он даст то, что вам нужно. –

33
attrs.$observe('class', function(val){}); 
+3

не работает :( – Agzam

+0

хммм. можете ли вы разместить JSFiddle? Не знаете, какую проблему вы пытаетесь решить. – Ketan

+0

http://jsfiddle.net/aW9dU/2/ – Agzam

1

Вы также можете просмотреть переменную в контроллере.

Этот код автоматически скрывает панель уведомлений после того, как какой-либо другой модуль отобразит сообщение обратной связи.

HTML:

<notification-bar 
    data-showbar='vm.notification.show'> 
     <p> {{ vm.notification.message }} </p> 
</notification-bar> 

ДИРЕКТИВА:

var directive = { 
    restrict: 'E', 
    replace: true, 
    transclude: true, 
    scope: { 
     showbar: '=showbar', 
    }, 
    templateUrl: '/app/views/partials/notification.html', 
    controller: function ($scope, $element, $attrs) { 

     $scope.$watch('showbar', function (newValue, oldValue) { 
      //console.log('showbar changed:', newValue); 
      hide_element(); 
     }, true); 

     function hide_element() { 
      $timeout(function() { 
       $scope.showbar = false; 
      }, 3000); 
     } 
    } 
}; 

ДИРЕКТИВА ШАБЛОН:

<div class="notification-bar" data-ng-show="showbar"><div> 
    <div class="menucloud-notification-content"></div> 
Смежные вопросы