Template AngularJS saya berisi beberapa sintaks HTML kustom seperti:
<su-label tooltip="{{field.su_documentation}}">{{field.su_name}}</su-label>
Saya membuat arahan untuk memprosesnya:
.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');
}
},
}
})
Semuanya berfungsi dengan baik, kecuali attrs.tooltip
ekspresi, yang selalu kembali undefined
, meskipun tooltip
atribut terlihat dari konsol JavaScript Google Chrome saat melakukanconsole.log(attrs)
.
Ada saran?
UPDATE: Solusi ditawarkan oleh Artem. Itu terdiri dari melakukan ini:
link: function(scope, element, attrs) {
attrs.$observe('tooltip', function(value) {
if (value) {
element.addClass('tooltip-title');
}
});
}
AngularJS + stackoverflow = kebahagiaan
angularjs
angularjs-directive
Ismael Ghalimi
sumber
sumber
Jawaban:
Lihat bagian Atribut dari dokumentasi tentang arahan.
sumber
Meskipun menggunakan '@' lebih tepat daripada menggunakan '=' untuk skenario khusus Anda, terkadang saya menggunakan '=' sehingga saya tidak perlu ingat untuk menggunakan attrs. $ Observasi ():
Pengarahan:
Biola .
Dengan '=' kita mendapatkan penyatuan data dua arah, jadi kehati-hatian harus dilakukan untuk memastikan scope.title tidak dimodifikasi secara tidak sengaja dalam direktif. Keuntungannya adalah selama fase penautan, properti cakupan lokal (scope.title) ditentukan.
sumber
@
vs di=
sini .