Bạn có thể cho phép người dùng vượt qua trong lớp và/hoặc các yếu tố phong cách trên chỉ thị riêng của mình và bạn có thể có quyền kiểm soát hạt mịn hơn như thế nào mà lớp/phong cách được áp dụng cho mẫu của bạn. Bước đầu tiên là khai báo chỉ thị của bạn với replace : true
, sau đó sẽ mang bất kỳ thông tin lớp/kiểu nào vào mẫu cơ bản của bạn. Ví dụ:
app.directive("myDirective",function(){
return {
restrict:'AE',
replace : true,
template: '<div>This is my directive</div>'
};
});
Khi bạn sử dụng này trong HTML như thế này:
<my-directive class="red"></my-directive>
HTML kết quả sẽ là:
<div class="red">This is my directive</div>
Như bạn có thể thấy, thay thế chỉ loại bỏ các chỉ thị , nhưng giữ nguyên các thuộc tính của chỉ thị và áp dụng chúng cho mẫu. Vì vậy, trong chỉ thị của bạn, bạn về mặt kỹ thuật không phải làm bất cứ điều gì và người dùng của bạn có thể chuyển thông tin phong cách để được tự động áp dụng khi cần thiết.
Tuy nhiên, chúng ta hãy giả sử rằng bố trí chỉ thị của bạn là phức tạp hơn:
app.directive("myDirective",function(){
return {
restrict:'AE',
replace : true,
template: '<div><div>My Title</div>My content</div>'
};
});
Sau đó, bạn có thể chỉ ra một cách rõ ràng tài liệu tham khảo lớp/phong cách bổ sung mà chỉ bạn có thể tùy chọn sử dụng và nơi lớp sẽ được áp dụng. Ví dụ:
<my-directive class="red" class-title="blue"></my-directive>
Và sau đó, trong biên dịch hoặc liên kết chức năng của chỉ thị, bạn có thể thiết lập các lớp cho các hạng mục mẫu nội bộ nếu chúng được chỉ ra:
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)
}
}
};
});
nào sẽ cho kết quả như sau:
<div class="red" class-header="blue">
<div class="blue">My Title</div>
My Content
</div>
Thậm chí còn có nhiều điều tốt hơn bạn có thể làm với việc chuyển đổi để mọi người có thể sử dụng nội dung và kiểu dáng của riêng họ cho các yếu tố.
Không chắc bạn có thể phạm vi phong cách mà không bóng dom. Đó là những gì Polymer và các thành phần web nhằm mục đích sử dụng để đóng gói. Các chỉ thị góc sẽ kế thừa các kiểu từ tài liệu. – cameronroe
Đúng vậy. Đây là lý do tại sao tôi đánh dấu là câu trả lời đúng cái gì đó bắt chước hành vi này, mặc dù không có DOM bóng. – bdavidxyz