Мой шаблон AngularJS содержит настраиваемый синтаксис HTML, например:
<su-label tooltip="{{field.su_documentation}}">{{field.su_name}}</su-label>
Я создал директиву для его обработки:
.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');
}
},
}
})
Все работает нормально, за исключением attrs.tooltip
выражения, которое всегда возвращается undefined
, даже если tooltip
атрибут виден из консоли JavaScript Google Chrome при выполнении console.log(attrs)
.
Любое предложение?
ОБНОВЛЕНИЕ: Решение предложил Артем. Он заключался в следующем:
link: function(scope, element, attrs) {
attrs.$observe('tooltip', function(value) {
if (value) {
element.addClass('tooltip-title');
}
});
}
AngularJS + stackoverflow = блаженство
angularjs
angularjs-directive
Исмаэль Галими
источник
источник
Ответы:
См. Раздел Атрибуты документации по директивам.
источник
Хотя использование '@' более уместно, чем использование '=' для вашего конкретного сценария, иногда я использую '=', чтобы мне не нужно было помнить об использовании attrs. $ Наблюдать ():
Директива:
Скрипка .
С '=' мы получаем двустороннюю привязку данных, поэтому необходимо позаботиться о том, чтобы в директиве не было случайно изменено scope.title. Преимущество заключается в том, что на этапе связывания определяется свойство локальной области (scope.title).
источник
@
vs=
здесь .