The controllerFungsi / object merupakan abstraksi model-view-controller (MVC). Meskipun tidak ada yang baru untuk menulis tentang MVC, itu masih merupakan kemajuan sudut pandang yang paling signifikan: pisahkan masalah menjadi bagian-bagian yang lebih kecil. Dan itu, tidak lebih, jadi jika Anda perlu untuk bereaksi pada Modelperubahan yang datang dari Viewyang Controlleradalah hak orang untuk melakukan pekerjaan itu.
Cerita tentang linkfungsi berbeda, itu datang dari sudut pandang yang berbeda dari MVC. Dan benar-benar penting, sekali kita ingin melewati batas controller/model/view (templat) .
Mari kita mulai dengan parameter yang diteruskan ke linkfungsi:
function link(scope, element, attrs) {
- scope adalah objek lingkup Angular.
- element adalah elemen terbungkus jqLite yang sesuai dengan arahan ini.
- attrs adalah objek dengan nama atribut yang dinormalisasi dan nilainya yang sesuai.
Untuk memasukkannya linkke dalam konteks, kita harus menyebutkan bahwa semua arahan sedang melalui langkah-langkah proses inisialisasi ini: Kompilasi , Tautan . Ekstrak dari buku Brad Green dan Shyam Seshadri Angular JS :
Fase kompilasi (saudara perempuan tautan, sebut saja di sini untuk mendapatkan gambar yang jelas):
Dalam fase ini, Angular berjalan DOM untuk mengidentifikasi semua arahan terdaftar dalam template. Untuk setiap arahan, itu kemudian mengubah DOM berdasarkan aturan arahan (templat, ganti, transclude, dan sebagainya), dan memanggil fungsi kompilasi jika ada. Hasilnya adalah fungsi template yang dikompilasi,
Fase tautan :
Untuk membuat tampilan dinamis, Angular kemudian menjalankan fungsi tautan untuk setiap arahan. Fungsi tautan biasanya membuat pendengar pada DOM atau model. Pendengar ini menjaga tampilan dan model tetap sinkron setiap saat.
Sebuah contoh yang bagus bagaimana cara menggunakan linkdapat ditemukan di sini: Membuat Arahan Kustom . Lihat contoh: Membuat Arahan yang Memanipulasi DOM , yang memasukkan "tanggal-waktu" ke halaman, disegarkan setiap detik.
Cuplikan singkat dari sumber kaya di atas, menunjukkan manipulasi nyata dengan DOM. Ada fungsi terhubung ke layanan timeout $, dan juga dihapus dalam panggilan destruktor untuk menghindari kebocoran memori
.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,$digestdan$apply. "?