จะประกาศฟังก์ชั่นต่าง ๆ ได้อย่างไร?
รวบรวม, ควบคุม, Pre-link & Post-link
หากมีการใช้ทั้งสี่ฟังก์ชั่นคำสั่งจะเป็นไปตามแบบฟอร์มนี้:
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
}
};
}
};
});
โปรดสังเกตว่าการคอมไพล์ส่งคืนออบเจกต์ที่มีทั้งฟังก์ชั่น pre-link และ post-link ในเชิงมุมศัพท์แสงที่เราบอกว่าฟังก์ชั่นรวบรวมส่งกลับฟังก์ชั่นแม่แบบ
รวบรวมควบคุมและโพสต์ลิงค์
หากpre-link
ไม่จำเป็นฟังก์ชันคอมไพล์สามารถส่งคืนฟังก์ชันโพสต์ลิงก์แทนวัตถุนิยามได้เช่น:
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
};
}
};
});
บางครั้งมีความปรารถนาที่จะเพิ่มcompile
วิธีการหลังจากกำหนด (โพสต์) link
วิธี สำหรับสิ่งนี้หนึ่งสามารถใช้:
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
}
};
});
ตัวควบคุมและโพสต์ลิงค์
หากไม่จำเป็นต้องมีฟังก์ชั่นการคอมไพล์เราสามารถข้ามการประกาศไปพร้อม ๆ กันและจัดให้มีฟังก์ชั่นโพสต์ลิงค์ภายใต้link
คุณสมบัติของวัตถุการกำหนดค่าของคำสั่ง:
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
},
};
});
ไม่มีตัวควบคุม
ในตัวอย่างใด ๆ ข้างต้นคุณสามารถลบcontroller
ฟังก์ชั่นได้ถ้าไม่ต้องการ ตัวอย่างเช่นหากpost-link
จำเป็นต้องใช้ฟังก์ชั่นเดียวสามารถใช้:
myApp.directive( 'myDirective', function () {
return {
restrict: 'EA',
link: function postLink( scope, element, attributes, controller, transcludeFn ) {
// Post-link code goes here
},
};
});