Mój szablon AngularJS zawiera niestandardową składnię HTML, taką jak:
<su-label tooltip="{{field.su_documentation}}">{{field.su_name}}</su-label>
Stworzyłem dyrektywę, aby to przetworzyć:
.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');
}
},
}
})
Wszystko działa dobrze, z wyjątkiem attrs.tooltip
wyrażenia, które zawsze zwraca undefined
, mimo że tooltip
atrybut jest widoczny z konsoli JavaScript przeglądarki Google Chrome podczas wykonywania polecenia console.log(attrs)
.
Jakieś sugestie?
AKTUALIZACJA: Rozwiązanie zaproponował Artem. Polegał na tym:
link: function(scope, element, attrs) {
attrs.$observe('tooltip', function(value) {
if (value) {
element.addClass('tooltip-title');
}
});
}
AngularJS + stackoverflow = błogość
angularjs
angularjs-directive
Ismael Ghalimi
źródło
źródło
Odpowiedzi:
Zobacz sekcję Atrybuty z dokumentacji na temat dyrektyw.
źródło
Chociaż użycie znaku '@' jest bardziej odpowiednie niż użycie '=' dla twojego konkretnego scenariusza, czasami używam '=', aby nie musieć pamiętać o używaniu atrybutów. $ Obserwuj ():
Dyrektywa:
Skrzypce .
Z '=' otrzymujemy dwukierunkowe wiązanie danych, więc należy uważać, aby właściwość scope.title nie została przypadkowo zmodyfikowana w dyrektywie. Zaletą jest to, że podczas fazy łączenia definiowana jest właściwość zakresu lokalnego (scope.title).
źródło
@
vs=
tutaj .