Acessando atributos de uma diretiva AngularJS

Meu modelo AngularJS contém algumas syntaxs HTML personalizadas como:

{{field.su_name}} 

Eu criei uma diretiva para processá-lo:

 .directive('suLabel', function() { return { restrict: 'E', replace: true, transclude: true, scope: { title: '@tooltip' }, template: '', link: function(scope, element, attrs) { if (attrs.tooltip) { element.addClass('tooltip-title'); } }, } }) 

Tudo funciona bem, com exceção da expressão attrs.tooltip , que sempre retorna undefined , mesmo que o atributo tooltip seja visível no console JavaScript do Google Chrome ao fazer um console.log(attrs) .

Alguma sugestão?

ATUALIZAÇÃO: Uma solução foi oferecida por Artem. Consistia em fazer isso:

 link: function(scope, element, attrs) { attrs.$observe('tooltip', function(value) { if (value) { element.addClass('tooltip-title'); } }); } 

AngularJS + stackoverflow = bliss

Veja a seção Atributos da documentação em diretivas.

observando os atributos interpolados : Use $ observe para observar as alterações de valor dos atributos que contêm interpolação (por exemplo, src = “{{bar}}”). Não só isso é muito eficiente, mas também é a única maneira de obter facilmente o valor real porque, durante a fase de vinculação, a interpolação ainda não foi avaliada e, portanto, o valor é definido como indefinido.

Embora o uso de ‘@’ seja mais apropriado do que usar ‘=’ para o seu cenário em particular, às vezes eu uso ‘=’ para que eu não tenha que lembrar de usar attrs. $ Observe ():

 {{field.su_name}} 

Directiva:

 myApp.directive('suLabel', function() { return { restrict: 'E', replace: true, transclude: true, scope: { title: '=tooltip' }, template: '', link: function(scope, element, attrs) { if (scope.title) { element.addClass('tooltip-title'); } }, } }); 

Violino .

Com ‘=’ obtemos binding de dados bidirecional, portanto, deve-se tomar cuidado para garantir que o escopo não seja modificado acidentalmente na diretiva. A vantagem é que durante a fase de vinculação, a propriedade de escopo local (scope.title) é definida.