Modul adalah cara penting untuk mengatur modul dalam sudut. Ini memberikan kemampuan untuk merangkum satu set komponen bisnis yang kohesif (pengontrol, layanan, filter, arahan ...). Melakukan hal itu dapat memisahkan kode menjadi modul sesuai dengan masalah domain bisnis, dan kemudian menggunakan ketergantungan modul untuk menyuntikkan konten modul yang terkait, sehingga kami dapat dengan lebih baik "memisahkan fokus" dan mencapai "kohesi tinggi dan kopling rendah" yang lebih baik. "Kohesi tinggi dan kopling rendah" berasal dari prinsip desain berorientasi objek. Kohesi mengacu pada integritas modul atau objek. Satu set logika yang terkait erat harus dienkapsulasi dalam modul yang sama, objek dan unit kode lainnya, daripada tersebar di mana -mana; Kopling mengacu pada tingkat ketergantungan antara modul, objek dan unit kode lainnya. Jika modifikasi satu modul akan mempengaruhi modul lain, itu berarti bahwa kedua modul tersebut saling bergantung dan digabungkan dengan ketat.
Pada saat yang sama, modul juga merupakan pintu masuk ke kode sudut kami. Pertama, Anda perlu mendeklarasikan modul, dan kemudian Anda dapat mendefinisikan elemen komponen lainnya dalam sudut, seperti pengontrol, layanan, filter, arahan, blok kode konfigurasi, menjalankan blok kode, dll.
Definisi modul adalah: angular.module ('com.ngbook.demo', []). Mengenai fungsi modul, tiga parameter dapat dilewati, dan mereka adalah:
Untuk metode Angular.module, kami memiliki metode umum, yaitu Angular.module ('com.ngbook.demo', [ketergantungan opsional]) dan Angular.module ('com.ngbook.demo'). Perhatikan bahwa itu adalah cara yang sama sekali berbeda, satu adalah untuk mendeklarasikan modul pembuatan, dan yang lainnya adalah untuk mendapatkan modul yang dinyatakan. Dalam aplikasi, deklarasi modul harus dan hanya sekali; Untuk mendapatkan modul, itu bisa beberapa kali. Dianjurkan untuk memisahkan komponen sudut dalam file yang berbeda, mendeklarasikan modul dalam file modul, dan komponen lain memperkenalkan modul. Perlu dicatat bahwa ketika memperkenalkannya dalam pengemasan atau skrip, kita perlu memuat file deklarasi modul terlebih dahulu, dan kemudian memuat modul komponen lainnya.
Dalam kelompok Komunitas Tiongkok Angular, kadang -kadang saya mendengar beberapa siswa bertanya tentang kesalahan "ng: areq":
[ng: areq] argumen 'democtrl' bukan fungsi, tidak ditentukan!
Ini sering karena Anda lupa untuk mendefinisikan pengontrol atau mendeklarasikan modul beberapa kali. Mendeklarasikan modul beberapa kali akan menyebabkan informasi definisi modul sebelumnya dihapus, sehingga program tidak akan menemukan komponen yang ditentukan. Kami juga dapat mempelajari ini dari kode sumber sudut (dari loader.js):
function setupmoduleLoader (window) {... function paste (obj, name, factory) {return obj [name] || (obj [name] = factory ()); } var angular = Pastikan (jendela, 'sudut', objek); return ensure(angular, 'module', function() { var modules = {}; return function module(name, requires, configFn) { var assertNotHasOwnProperty = function(name, context) { if (name === 'hasOwnProperty') { throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); } }; AssertNothasOwnProperty (name, 'Module'); if (membutuhkan && modules.hasownproperty (name)) {Modul [name] = null; memuatnya. provider: invokeLater('$provide', 'provider'), factory: invokeLater('$provide', 'factory'), service: invokeLater('$provide', 'service'), value: invokeLater('$provide', 'value'), constant: invokeLater('$provide', 'constant', 'unshift'), animation: invokeLater('$animateProvider', 'Daftar'): Invokelater ($ filterprovider ',' Register '), Controller: Invokelater (' $ ControllerProvider ',' Register '), Directive: Invokelater (' $ CompileProvider ',' Konfigurasi '(rune (blok) (blok) (blok) (blok) (blok) (blok) (blokir); ModuleInstance; }; }); }Dalam kode, kita dapat memahami bahwa ketika Angular dimulai, itu akan mengatur objek sudut global, dan kemudian menerbitkan API modul pada objek sudut. Mengenai kode API modul, Anda dapat dengan jelas melihat lini pertama pernyataan predikat. Nama modul tidak dapat dinamai setelah HasownProperty, jika tidak, pesan kesalahan "Badname" akan dilemparkan. Segera setelah itu, jika parameter nama diteruskan, yang menunjukkan bahwa modul dinyatakan, informasi modul yang ada akan dihapus dan diatur ke nol.
Dari definisi ModuleInstance, kita dapat melihat bahwa API yang diekspos oleh Angular.module adalah: invokequeue, runblocks, membutuhkan, nama, penyedia, pabrik, layanan, nilai, konstan, animasi, filter, pengontrol, arahan, konfigurasi, dan dijalankan. Di antara mereka, Invokequeue dan Runblocks adalah atribut pribadi yang disepakati dengan nama. Tolong jangan menggunakannya sesuka hati. API lainnya adalah metode definisi komponen sudut yang umum digunakan. Dari kode Invokelater, Anda dapat melihat bahwa pengembalian definisi komponen sudut tersebut masih merupakan instance ModuleInstance, yang membentuk API yang halus. Disarankan untuk menggunakan definisi rantai untuk menentukan komponen -komponen ini alih -alih menyatakan variabel modul global.
Akhirnya, jika konfigurasi parameter ketiga dilewatkan, itu akan dikonfigurasi ke dalam informasi konfigurasi. Ketika sudut memasuki tahap konfigurasi, mereka akan dieksekusi secara bergantian untuk mengkonfigurasi aplikasi sudut atau komponen sudut seperti layanan sebelum instantiasi.
Di atas adalah kompilasi pernyataan modul sudut dan informasi yang diperoleh kelebihan beban. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs web ini!