The controller
Fungsi / 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 Model
perubahan yang datang dari View
yang Controller
adalah hak orang untuk melakukan pekerjaan itu.
Cerita tentang link
fungsi 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 link
fungsi:
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 link
ke 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 link
dapat 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
,$digest
dan$apply
. "?