Làm thế nào để khai báo các chức năng khác nhau?
Biên dịch, điều khiển, liên kết trước và sau liên kết
Nếu một là sử dụng cả bốn chức năng, lệnh sẽ theo mẫu này:
myApp.directive( 'myDirective', function () {
return {
restrict: 'EA',
controller: function( $scope, $element, $attrs, $transclude ) {
// Controller code goes here.
},
compile: function compile( tElement, tAttributes, transcludeFn ) {
// Compile code goes here.
return {
pre: function preLink( scope, element, attributes, controller, transcludeFn ) {
// Pre-link code goes here
},
post: function postLink( scope, element, attributes, controller, transcludeFn ) {
// Post-link code goes here
}
};
}
};
});
Lưu ý rằng biên dịch trả về một đối tượng có chứa cả hàm pre-link và post-link; trong biệt ngữ Angular chúng ta nói hàm biên dịch trả về một hàm mẫu .
Biên dịch, điều khiển và liên kết bài
Nếu pre-link
không cần thiết, hàm biên dịch có thể chỉ cần trả về hàm post-link thay vì một đối tượng định nghĩa, như vậy:
myApp.directive( 'myDirective', function () {
return {
restrict: 'EA',
controller: function( $scope, $element, $attrs, $transclude ) {
// Controller code goes here.
},
compile: function compile( tElement, tAttributes, transcludeFn ) {
// Compile code goes here.
return function postLink( scope, element, attributes, controller, transcludeFn ) {
// Post-link code goes here
};
}
};
});
Đôi khi, một người muốn thêm một compile
phương thức, sau khi phương thức (bài) link
được xác định. Đối với điều này, người ta có thể sử dụng:
myApp.directive( 'myDirective', function () {
return {
restrict: 'EA',
controller: function( $scope, $element, $attrs, $transclude ) {
// Controller code goes here.
},
compile: function compile( tElement, tAttributes, transcludeFn ) {
// Compile code goes here.
return this.link;
},
link: function( scope, element, attributes, controller, transcludeFn ) {
// Post-link code goes here
}
};
});
Bộ điều khiển và liên kết bài
Nếu không có chức năng biên dịch là cần thiết, người ta có thể bỏ qua khai báo của nó hoàn toàn và cung cấp chức năng hậu liên kết dưới thuộc link
tính của đối tượng cấu hình của lệnh:
myApp.directive( 'myDirective', function () {
return {
restrict: 'EA',
controller: function( $scope, $element, $attrs, $transclude ) {
// Controller code goes here.
},
link: function postLink( scope, element, attributes, controller, transcludeFn ) {
// Post-link code goes here
},
};
});
Không có bộ điều khiển
Trong bất kỳ ví dụ nào ở trên, người ta có thể chỉ cần loại bỏ controller
hàm nếu không cần thiết. Vì vậy, ví dụ, nếu chỉ cần post-link
chức năng, người ta có thể sử dụng:
myApp.directive( 'myDirective', function () {
return {
restrict: 'EA',
link: function postLink( scope, element, attributes, controller, transcludeFn ) {
// Post-link code goes here
},
};
});