A directive
cho 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-app
thuộc tính là một chỉ thị, như vậy là ng-controller
và tất cả các ng- prefixed attributes
. Chỉ thị có thể attributes
, tags
hoặc thậm chí class
names
, comments
.
Làm thế nào các chỉ thị được sinh ra ( compilation
và instantiation
)
Biên dịch: Chúng tôi sẽ sử dụng compile
hàm cho cả manipulate
DOM trước khi nó được kết xuất và trả về một link
hà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 instances
chỉ thị này.
liên kết: Chúng tôi sẽ sử dụng link
chứ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){
}
};
});
Compile
Hàm trả về hàm pre
và post
liê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.
Post
chứ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ờ transclusion
là 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 link
tùy chọn chỉ là một phím tắt để thiết lập một post-link
chứ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
}
}
});