controller
ฟังก์ชั่น / วัตถุหมายถึงสิ่งที่เป็นนามธรรมแบบ View-Controller (MVC) ในขณะที่ไม่มีอะไรใหม่ที่จะเขียนเกี่ยวกับ MVC มันยังคงเป็นความได้เปรียบที่สำคัญที่สุดของเชิงมุม: แยกข้อกังวลออกเป็นชิ้นเล็ก ๆ และนั่นคือไม่มีอะไรเพิ่มเติมดังนั้นหากคุณต้องการที่จะตอบสนองต่อModel
การเปลี่ยนแปลงที่มาจากView
ที่Controller
เป็นบุคคลที่เหมาะสมในการทำงาน
เรื่องราวเกี่ยวกับlink
ฟังก์ชั่นนั้นแตกต่างกันมันมาจากมุมมองที่ต่างจากนั้นคือ MVC และเป็นสิ่งจำเป็นจริงๆเมื่อเราต้องการที่จะข้ามเขตแดนของ(แม่แบบ)controller/model/view
เรามาเริ่มด้วยพารามิเตอร์ที่ส่งผ่านเข้าไปในlink
ฟังก์ชั่น:
function link(scope, element, attrs) {
- scopeเป็นวัตถุขอบเขต Angular
- องค์ประกอบเป็นองค์ประกอบห่อ jqLite ที่ตรงกับคำสั่งนี้
- attrsเป็นวัตถุที่มีชื่อแอตทริบิวต์ปกติและค่าที่เกี่ยวข้อง
ใส่link
ลงในบริบทที่เราควรจะพูดถึงว่าคำสั่งทั้งหมดจะผ่านขั้นตอนนี้กระบวนการเริ่มต้น: คอมไพล์ , การเชื่อมโยง สารสกัดจากBrad Green และ Shyam Seshadri book Angular JS :
Compile phase (น้องสาวของลิงค์เรามาพูดถึงที่นี่เพื่อรับภาพที่ชัดเจน):
ในขั้นตอนนี้ Angular จะเดิน DOM เพื่อระบุคำสั่งที่ลงทะเบียนทั้งหมดในเทมเพลต สำหรับแต่ละคำสั่งจากนั้นจะแปลง DOM ตามกฎของคำสั่ง (แม่แบบแทนที่ transclude และอื่น ๆ ) และเรียกใช้ฟังก์ชันการคอมไพล์หากมีอยู่ ผลลัพธ์ที่ได้คือฟังก์ชั่นเทมเพลตที่รวบรวม
ลิงค์เฟส :
ในการทำให้มุมมองเป็นแบบไดนามิก Angular จะเรียกใช้ฟังก์ชันลิงก์สำหรับแต่ละคำสั่ง ฟังก์ชั่นการเชื่อมโยงมักจะสร้างฟังบน DOM หรือรูปแบบ ผู้ฟังเหล่านี้คอยดูและโมเดลอยู่ตลอดเวลา
เป็นตัวอย่างที่ดีวิธีการใช้link
อาจจะพบได้ที่นี่: การสร้างแนวทางที่กำหนดเอง ดูตัวอย่าง: การสร้างคำสั่งที่จัดการกับ DOMซึ่งแทรก "วันที่ - เวลา" ในหน้ารีเฟรชทุกวินาที
เพียงตัวอย่างสั้น ๆ จากแหล่งที่อุดมไปด้วยข้างต้นแสดงการจัดการที่แท้จริงด้วย DOM มีฟังก์ชั่น hooked เพื่อ $ timeout service และยังถูกล้างในการโทรdestructorเพื่อหลีกเลี่ยงการรั่วไหลของหน่วยความจำ
.directive('myCurrentTime', function($timeout, dateFilter) {
function link(scope, element, attrs) {
...
// the not MVC job must be done
function updateTime() {
element.text(dateFilter(new Date(), format)); // here we are manipulating the DOM
}
function scheduleUpdate() {
// save the timeoutId for canceling
timeoutId = $timeout(function() {
updateTime(); // update DOM
scheduleUpdate(); // schedule the next update
}, 1000);
}
element.on('$destroy', function() {
$timeout.cancel(timeoutId);
});
...
$watch
,$digest
และ$apply
. "?