A directivecho phép bạn mở rộng vốn từ vựng HTML theo cách khai báo để xây dựng các thành phần web. Các ng-appthuộc tính là một chỉ thị, như vậy là ng-controllervà tất cả các ng- prefixed attributes. Chỉ thị có thể attributes, tagshoặc thậm chí class names, comments.
Làm thế nào các chỉ thị được sinh ra ( compilationvà instantiation)
Biên dịch: Chúng tôi sẽ sử dụng compilehàm cho cả manipulateDOM trước khi nó được kết xuất và trả về một linkhàm (sẽ xử lý liên kết cho chúng tôi). Đây cũng là nơi để đặt bất kỳ phương pháp nào cần được chia sẻ xung quanh với tất cả các instanceschỉ thị này.
liên kết: Chúng tôi sẽ sử dụng linkchức năng để đăng ký tất cả người nghe trên một thành phần DOM cụ thể (được sao chép từ mẫu) và thiết lập các liên kết của chúng tôi với trang.
Nếu được đặt trong compile()hàm, chúng sẽ chỉ được đặt một lần (thường là những gì bạn muốn). Nếu được đặt trong link()hàm, chúng sẽ được đặt mỗi khi phần tử HTML được liên kết với dữ liệu trong
đối tượng.
<div ng-repeat="i in [0,1,2]">
<simple>
<div>Inner content</div>
</simple>
</div>
app.directive("simple", function(){
return {
restrict: "EA",
transclude:true,
template:"<div>{{label}}<div ng-transclude></div></div>",
compile: function(element, attributes){
return {
pre: function(scope, element, attributes, controller, transcludeFn){
},
post: function(scope, element, attributes, controller, transcludeFn){
}
}
},
controller: function($scope){
}
};
});
CompileHàm trả về hàm prevà postliên kết. Trong hàm liên kết trước, chúng ta có mẫu cá thể và phạm vi từ controller, nhưng mẫu không bị ràng buộc với phạm vi và vẫn không có nội dung được nhúng.
Postchức năng liên kết là nơi bài viết liên kết là chức năng cuối cùng để thực hiện. Bây giờ transclusionlà hoàn thành the template is linked to a scope, và view will update with data bound values after the next digest cycle. Các linktùy chọn chỉ là một phím tắt để thiết lập một post-linkchức năng.
bộ điều khiển: Bộ điều khiển chỉ thị có thể được chuyển sang giai đoạn liên kết / biên dịch lệnh khác. Nó có thể được tiêm vào các chỉ thị khác như một phương tiện để sử dụng trong giao tiếp giữa các chỉ thị.
Bạn phải chỉ định tên của lệnh được yêu cầu - Nó phải được liên kết với cùng một phần tử hoặc phần tử mẹ của nó. Tên có thể được bắt đầu bằng:
? – Will not raise any error if a mentioned directive does not exist.
^ – Will look for the directive on parent elements, if not available on the same element.
Sử dụng dấu ngoặc vuông [‘directive1′, ‘directive2′, ‘directive3′]để yêu cầu nhiều bộ điều khiển chỉ thị.
var app = angular.module('app', []);
app.controller('MainCtrl', function($scope, $element) {
});
app.directive('parentDirective', function() {
return {
restrict: 'E',
template: '<child-directive></child-directive>',
controller: function($scope, $element){
this.variable = "Hi Vinothbabu"
}
}
});
app.directive('childDirective', function() {
return {
restrict: 'E',
template: '<h1>I am child</h1>',
replace: true,
require: '^parentDirective',
link: function($scope, $element, attr, parentDirectCtrl){
//you now have access to parentDirectCtrl.variable
}
}
});