Można zezwolić użytkownikom przechodzić w klasie i/lub elementów stylu nad dyrektywą się i można mieć precyzyjną kontrolę nad tym, w jaki sposób klasa/stylu zostanie zastosowany do twojego szablonu. Pierwszym krokiem jest zadeklarowanie swojej dyrektywy z replace : true
, która następnie przeniesie wszelkie informacje o klasie/stylu do bazowego szablonu. Na przykład:
app.directive("myDirective",function(){
return {
restrict:'AE',
replace : true,
template: '<div>This is my directive</div>'
};
});
Podczas korzystania z tego w HTML tak:
<my-directive class="red"></my-directive>
Powstały HTML będą:
<div class="red">This is my directive</div>
Jak widać, zastąpi dyrektywę usuwa dyrektywę tag, ale zachowuje atrybuty dyrektywy i stosuje je do szablonu. Dlatego w twojej dyrektywie technicznie nie musisz nic robić, a twoi użytkownicy mogą przekazywać informacje o stylu, które będą automatycznie stosowane w razie potrzeby.
Jednak załóżmy, że układ dyrektywa jest bardziej skomplikowana:
app.directive("myDirective",function(){
return {
restrict:'AE',
replace : true,
template: '<div><div>My Title</div>My content</div>'
};
});
Następnie można jednoznacznie wskazać dodatkowe referencje klasa/stylu, że dyrektywa może opcjonalnie używać i gdzie będzie stosowana klasa. Na przykład:
<my-directive class="red" class-title="blue"></my-directive>
a następnie w kompilacji lub łącza funkcji Twojego dyrektywy, można ustawić klasę dla wewnętrznych elementów szablonu, jeśli zostały one podane:
app.directive("myDirective",function(){
return {
restrict:'AE',
replace : true,
template: '<div><div>Title</div>Content</div>',
compile : function(elem,attr){
if (attr.classTitle){
var titleElem = angular.element(elem.children()[0]);
titleElem.attr("class",attr.classTitle)
}
}
};
});
Które spowodowałoby następujące:
<div class="red" class-header="blue">
<div class="blue">My Title</div>
My Content
</div>
Jest jeszcze więcej dobrych rzeczy, które można zrobić z transclusion, aby ludzie mogli używać własnych treści i stylizacji dla elementów.
Nie wiesz, możesz style zakres bez cienia DOM. Właśnie to Polymer i elementy sieciowe mają wykorzystywać do enkapsulacji. Angularowe dyrektywy dziedziczą style z dokumentu. – cameronroe
Zgadza się. Właśnie dlatego zaznaczałem jako właściwą odpowiedź coś, co naśladuje to zachowanie, mimo że nie ma cienia DOM. – bdavidxyz