A directive
ช่วยให้คุณสามารถขยายคำศัพท์ HTML ในแบบที่ประกาศสำหรับการสร้างส่วนประกอบของเว็บ ng-app
แอตทริบิวต์เป็นคำสั่งเพื่อให้เป็นและทั้งหมดของng-controller
ng- prefixed attributes
Directives สามารถattributes
, tags
หรือแม้กระทั่ง,class
names
comments
คำสั่งเกิดอย่างไร ( compilation
และinstantiation
)
คอมไพล์:เราจะใช้compile
ฟังก์ชั่นทั้งmanipulate
DOM ก่อนที่มันจะถูกเรนเดอร์และส่งคืนlink
ฟังก์ชั่น (ที่จะจัดการการเชื่อมโยงสำหรับเรา) นี่เป็นสถานที่ที่จะวางวิธีการใด ๆ ที่จำเป็นต้องแบ่งปันให้ทั่วกับinstances
คำสั่งทั้งหมดนี้
ลิงก์:เราจะใช้link
ฟังก์ชั่นในการลงทะเบียนผู้ฟังทั้งหมดในองค์ประกอบ DOM เฉพาะ (ที่ถูกโคลนจากเทมเพลต) และตั้งค่าการเชื่อมโยงของเราไปยังหน้า
หากตั้งค่าในcompile()
ฟังก์ชั่นพวกเขาจะได้รับการตั้งค่าเพียงครั้งเดียว (ซึ่งมักจะเป็นสิ่งที่คุณต้องการ) หากตั้งค่าในlink()
ฟังก์ชั่นพวกเขาจะถูกตั้งค่าทุกครั้งที่องค์ประกอบ HTML ถูกผูกไว้กับข้อมูลใน
วัตถุ
<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
ฟังก์ชันส่งคืนฟังก์ชันpre
และpost
ลิงก์ ในฟังก์ชั่นการเชื่อมโยงล่วงหน้าเรามีแม่แบบอินสแตนซ์และขอบเขตจากcontroller
แต่ยังไม่ได้ผูกกับขอบเขตและยังไม่มีเนื้อหาที่แปลง
Post
ฟังก์ชั่นการเชื่อมโยงเป็นที่โพสต์ลิงค์เป็นฟังก์ชั่นสุดท้ายในการดำเนินการ ตอนนี้transclusion
เสร็จสมบูรณ์และthe template is linked to a scope
ตัวเลือกที่เป็นเพียงทางลัดในการตั้งค่าเป็นฟังก์ชั่นview will update with data bound values after the next digest cycle
link
post-link
ตัวควบคุม: ตัวควบคุมคำสั่งสามารถถูกส่งผ่านไปยังขั้นตอนการเชื่อมโยง / การรวบรวมคำสั่งอื่น มันสามารถถูกฉีดเข้าไปในคำสั่งอื่น ๆ เพื่อใช้ในการสื่อสารระหว่างคำสั่ง
คุณต้องระบุชื่อของคำสั่งที่จะต้อง - มันควรจะถูกผูกไว้กับองค์ประกอบเดียวกันหรือผู้ปกครองของมัน ชื่อสามารถนำหน้าด้วย:
? – 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.
ใช้วงเล็บเหลี่ยม[‘directive1′, ‘directive2′, ‘directive3′]
เพื่อต้องการตัวควบคุมไดเรกทีฟหลายตัว
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
}
}
});