Saat Anda membuat arahan, Anda dapat memasukkan kode ke kompiler, fungsi tautan, atau pengontrol.
Dalam dokumen, mereka menjelaskan bahwa:
- fungsi kompilasi dan tautan digunakan dalam berbagai fase siklus sudut
- pengendali dibagi di antara arahan
Namun, bagi saya tidak jelas, kode seperti apa yang harus dituju.
Misalnya: Dapatkah saya membuat fungsi dalam kompilasi dan membuatnya dilampirkan ke lingkup di tautan atau hanya melampirkan fungsi ke lingkup di controller?
Bagaimana pengontrol dibagikan di antara arahan, jika setiap arahan dapat memiliki pengontrolnya sendiri? Apakah pengendali benar-benar dibagikan atau hanya properti lingkup?
angularjs
angularjs-directive
schacki
sumber
sumber
Jawaban:
Menyusun :
Ini adalah fase di mana Angular sebenarnya menyusun arahan Anda. Fungsi kompilasi ini dipanggil sekali saja untuk setiap referensi ke arahan yang diberikan. Misalnya, Anda menggunakan arahan ng-repeat. ng-repeat harus mencari elemen yang dilampirkan, mengekstrak fragmen html yang dilampirkan dan membuat fungsi template.
Jika Anda telah menggunakan HandleBar, garis bawah template atau yang setara, itu seperti mengkompilasi template mereka untuk mengekstrak fungsi template. Untuk fungsi templat ini, Anda meneruskan data dan nilai kembalinya fungsi tersebut adalah html dengan data di tempat yang tepat.
Fase kompilasi adalah langkah di Angular yang mengembalikan fungsi template. Fungsi template ini dalam sudut disebut fungsi menghubungkan.
Menghubungkan fase:
Fase penautan adalah tempat Anda melampirkan data ($ scope) ke fungsi penautan dan itu akan mengembalikan Anda html tertaut. Karena arahan juga menentukan ke mana html ini pergi atau apa yang berubah, itu sudah baik untuk pergi. Ini adalah fungsi tempat Anda ingin membuat perubahan pada html yang ditautkan, yaitu html yang sudah memiliki data terlampir padanya. Dalam sudut jika Anda menulis kode pada fungsi penautan, umumnya fungsi pasca-tautan (secara default). Ini semacam panggilan balik yang dipanggil setelah fungsi penautan telah menautkan data dengan templat.
Pengendali:
Pengontrol adalah tempat di mana Anda memasukkan beberapa logika spesifik direktif. Logika ini dapat masuk ke fungsi penghubung juga, tetapi kemudian Anda harus meletakkan logika itu pada ruang lingkup untuk membuatnya "dapat dibagikan". Masalah dengan itu adalah bahwa Anda kemudian akan merusak ruang lingkup dengan hal-hal arahan Anda yang tidak benar-benar sesuatu yang diharapkan. Jadi apa alternatifnya jika dua Arahan ingin berbicara satu sama lain / bekerja sama satu sama lain? Tentu Anda bisa memasukkan semua logika itu ke dalam layanan dan kemudian membuat kedua arahan ini bergantung pada layanan itu, tetapi itu hanya membawa satu ketergantungan lagi. Alternatifnya adalah menyediakan Pengendali untuk lingkup ini (biasanya mengisolasi ruang lingkup?) Dan kemudian pengontrol ini disuntikkan ke arahan lain ketika arahan itu "membutuhkan" yang lain.
sumber
controller
fungsi direktif dijalankan setelah kompilasi, tetapi sebelumnyapre-link
di cabang pohon DOM lokal. Jugacontroller
danpre-link
fungsi yang dijalankan melintasi cabang DOM lokal dalam top-down cara. Setelah itupost-link
dieksekusi dengan cara bottom-up .controller
bukan dilink
mana - mana? Jadi saya tidak perlu mengubah kode di masa depan jika metode ini perlu dibagi atau beberapa logika yang akan diperkenalkan ?. Apakah ada jebakan dalam menggunakancontroller
sepanjang waktu alih-alih tautan?Saya ingin menambahkan juga apa yang dikatakan buku O'Reily AngularJS oleh Tim Google:
sumber
A
directive
memungkinkan Anda untuk memperluas kosakata HTML secara deklaratif untuk membangun komponen web. Theng-app
atribut direktif, jadi adalahng-controller
dan semuang- prefixed attributes
. Arahan dapatattributes
,tags
atau bahkanclass
names
,comments
.Bagaimana arahan dilahirkan (
compilation
daninstantiation
)Kompilasi: Kami akan menggunakan
compile
fungsi untuk keduamanipulate
DOM sebelum diberikan dan mengembalikanlink
fungsi (yang akan menangani tautan untuk kami). Ini juga tempat untuk meletakkan metode apa pun yang perlu dibagikan dengan semuainstances
arahan ini.tautan: Kami akan menggunakan
link
fungsi ini untuk mendaftarkan semua pendengar pada elemen DOM tertentu (yang dikloning dari templat) dan mengatur ikatan kami ke halaman.Jika diatur dalam
objek.
compile()
fungsi mereka hanya akan ditetapkan sekali (yang sering Anda inginkan). Jika diatur dalamlink()
fungsi mereka akan disetel setiap kali elemen HTML terikat ke data dalamCompile
fungsi mengembalikan fungsipre
danpost
tautan. Dalam fungsi pra tautan kami memiliki template contoh dan juga cakupan daricontroller
, tetapi template tersebut tidak terikat pada cakupan dan masih belum memiliki konten yang ditransklusikan.Post
fungsi tautan adalah tempat tautan pos adalah fungsi terakhir yang dijalankan. Sekarangtransclusion
selesaithe template is linked to a scope
,, danview will update with data bound values after the next digest cycle
. Thelink
pilihan adalah hanya jalan pintas untuk membuat sebuahpost-link
fungsi.controller: Controller directive dapat diteruskan ke fase penghubungan / kompilasi directive lainnya. Ini dapat disuntikkan ke arahan lain sebagai sarana untuk digunakan dalam komunikasi antar-direktif.
Anda harus menentukan nama arahan yang diperlukan - Ini harus terikat ke elemen yang sama atau induknya. Nama dapat diawali dengan:
Gunakan braket persegi
[‘directive1′, ‘directive2′, ‘directive3′]
untuk memerlukan beberapa arahan pengontrol.sumber
Selain itu, alasan yang baik untuk menggunakan fungsi pengontrol vs. tautan (karena keduanya memiliki akses ke ruang lingkup, elemen, dan attr) adalah karena Anda dapat meneruskan layanan atau ketergantungan yang tersedia ke pengontrol (dan dalam urutan apa pun), sedangkan Anda tidak dapat melakukannya dengan fungsi tautan. Perhatikan tanda tangan yang berbeda:
vs.
sumber
module.directive('myDirective', function($window) { etc...
. Ini kemudian dapat diakses dari dalam fungsi tautan.ini adalah contoh yang baik untuk memahami fase arahan http://codepen.io/anon/pen/oXMdBQ?editors=101
html
sumber
link
,compile
dancontroller
?require
direktif d dapat disuntikkan ke pengontrol direktif dependen?sumber