Beberapa tempat tampaknya menggunakan fungsi pengontrol untuk logika direktif dan yang lain menggunakan tautan. Contoh tab pada beranda sudut menggunakan pengontrol untuk satu dan tautan untuk pengarahan lain. Apa perbedaan keduanya?
Beberapa tempat tampaknya menggunakan fungsi pengontrol untuk logika direktif dan yang lain menggunakan tautan. Contoh tab pada beranda sudut menggunakan pengontrol untuk satu dan tautan untuk pengarahan lain. Apa perbedaan keduanya?
Jawaban:
Saya akan sedikit memperluas pertanyaan Anda dan juga menyertakan fungsi kompilasi.
kompilasi fungsi - gunakan untuk manipulasi DOM templat (yaitu, manipulasi tElement = elemen templat), karenanya manipulasi yang berlaku untuk semua klon DOM templat yang terkait dengan arahan. (Jika Anda juga memerlukan fungsi tautan (atau fungsi tautan sebelum dan sesudah), dan Anda mendefinisikan fungsi kompilasi, fungsi kompilasi harus mengembalikan fungsi tautan karena 'link'
atribut diabaikan jika 'compile'
atribut ditentukan.)
fungsi tautan - biasanya digunakan untuk mendaftarkan panggilan balik pendengar (yaitu, $watch
ekspresi pada ruang lingkup) serta memperbarui DOM (yaitu, manipulasi iElement = elemen contoh individual). Ini dieksekusi setelah template telah dikloning. Misalnya, di dalam <li ng-repeat...>
, fungsi tautan dijalankan setelah <li>
templat (tElement) telah dikloning (menjadi iElement) untuk <li>
elemen tertentu . A $watch
memungkinkan arahan untuk diberitahu tentang perubahan properti lingkup (lingkup terkait dengan setiap instance), yang memungkinkan arahan untuk memberikan nilai instance yang diperbarui ke DOM.
fungsi pengontrol - harus digunakan ketika arahan lain perlu berinteraksi dengan arahan ini. Misalnya, pada beranda AngularJS, arahan panel perlu menambahkan dirinya sendiri ke ruang lingkup yang dikelola oleh arahan tab, maka arahan tab perlu menentukan metode pengontrol (bayangkan API) yang arahan pane dapat akses / panggil.
Untuk penjelasan yang lebih mendalam tentang arahan tab dan panel, dan mengapa arahan tab membuat fungsi pada pengontrolnya menggunakan this
(bukan pada $scope
), silakan lihat 'this' vs $ scope pada pengontrol AngularJS .
Secara umum, Anda dapat memasukkan metode $watches
,, dll ke dalam pengontrol direktif atau fungsi tautan. Pengontrol akan berjalan terlebih dahulu, yang terkadang penting (lihat biola yang mencatat ketika fungsi ctrl dan tautan dijalankan dengan dua arahan bersarang). Seperti yang disebutkan Josh dalam komentar , Anda mungkin ingin meletakkan fungsi manipulasi-lingkup di dalam pengontrol hanya untuk konsistensi dengan sisa kerangka kerja.
mouseover
, yang lain untuk lingkup perubahan properti. Perbedaan besar.
Sebagai pelengkap jawaban Mark, fungsi kompilasi tidak memiliki akses ke cakupan, tetapi fungsi tautannya.
Saya sangat merekomendasikan video ini; Arahan Menulis oleh Misko Hevery (ayah dari AngularJS), di mana ia menggambarkan perbedaan dan beberapa teknik. (Perbedaan antara fungsi kompilasi dan fungsi tautan pada tanda 14:41 di video ).
Konvensi sudut: tulis logika bisnis di pengontrol dan manipulasi DOM di tautan.
Terlepas dari ini, Anda dapat memanggil satu fungsi pengontrol dari fungsi tautan dari arahan lain. Misalnya Anda memiliki 3 arahan khusus
<animal>
<panther>
<leopard></leopard>
</panther>
</animal>
dan Anda ingin mengakses hewan dari dalam direktif "macan tutul".
http://egghead.io/lessons/angularjs-directive-communication akan sangat membantu untuk mengetahui tentang komunikasi antar-direktif
compile
akan selalu dieksekusi sebelumnya controller
.
fungsi kompilasi -
sintaksis
function compile(tElement, tAttrs, transclude) { ... }
pengontrol
pra-tautan
Fungsi tautan bertanggung jawab untuk mendaftarkan pendengar DOM serta memperbarui DOM. Itu dieksekusi setelah template telah dikloning. Di sinilah sebagian besar logika arahan akan diletakkan.
Anda dapat memperbarui dom di controller menggunakan angular.element tetapi ini tidak dianjurkan karena elemen disediakan dalam fungsi tautan
Fungsi pra-tautan digunakan untuk mengimplementasikan logika yang berjalan ketika sudut js telah mengkompilasi elemen turunan tetapi sebelum salah satu tautan pos elemen turunan dipanggil
posting-tautan
arahan yang hanya memiliki fungsi tautan, sudut memperlakukan fungsi tersebut sebagai tautan pos
posting akan dieksekusi setelah kompilasi, pengontrol dan fungsi pre-link, jadi itu sebabnya ini dianggap sebagai tempat teraman dan default untuk menambahkan logika arahan Anda