Meu modelo AngularJS contém alguma sintaxe HTML personalizada como:
<su-label tooltip="{{field.su_documentation}}">{{field.su_name}}</su-label>
Eu criei uma diretiva para processá-lo:
.directive('suLabel', function() {
return {
restrict: 'E',
replace: true,
transclude: true,
scope: {
title: '@tooltip'
},
template: '<label><a href="#" rel="tooltip" title="{{title}}" data-placement="right" ng-transclude></a></label>',
link: function(scope, element, attrs) {
if (attrs.tooltip) {
element.addClass('tooltip-title');
}
},
}
})
Tudo funciona bem, exceto a attrs.tooltip
expressão, que sempre retorna undefined
, embora o tooltip
atributo 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 pela Artem. Consistia em fazer isso:
link: function(scope, element, attrs) {
attrs.$observe('tooltip', function(value) {
if (value) {
element.addClass('tooltip-title');
}
});
}
AngularJS + stackoverflow = êxtase
angularjs
angularjs-directive
Ismael Ghalimi
fonte
fonte
Respostas:
Consulte a seção Atributos da documentação sobre diretivas.
fonte
Embora usar '@' seja mais apropriado do que usar '=' para seu cenário particular, às vezes eu uso '=' para não ter que me lembrar de usar attrs. $ Observe ():
Diretriz:
Fiddle .
Com '=', obtemos ligação de dados bidirecional, portanto, deve-se tomar cuidado para garantir que scope.title não seja modificado acidentalmente na diretiva. A vantagem é que durante a fase de vinculação, a propriedade de escopo local (scope.title) é definida.
fonte
@
vs=
aqui .