Saya memiliki banyak modul Angular yang dideklarasikan di aplikasi saya. Saya awalnya mulai mendeklarasikannya menggunakan sintaks "dirantai" seperti ini:
angular.module('mymodule', [])
.controller('myctrl', ['dep1', function(dep1){ ... }])
.service('myservice', ['dep2', function(dep2){ ... }])
... // more here
Tetapi saya memutuskan bahwa itu tidak terlalu mudah untuk dibaca, jadi saya mulai mendeklarasikannya menggunakan variabel modul seperti ini:
var mod = angular.module('mymodule', []);
mod.controller('myctrl', ['dep1', function(dep1){ ... }]);
mod.service('myservice', ['dep2', function(dep2){ ... }]);
...
Sintaks kedua tampaknya jauh lebih mudah dibaca oleh saya, tetapi satu-satunya keluhan saya adalah bahwa sintaks ini meninggalkan mod
variabel dalam lingkup global. Jika saya pernah memiliki variabel lain bernama mod
, itu akan diganti dengan yang berikutnya ini (dan masalah lain yang terkait dengan variabel global).
Jadi pertanyaan saya adalah, apakah ini cara terbaik? Atau lebih baik melakukan hal seperti ini ?:
(function(){
var mod = angular.module('mymod', []);
mod.controller('myctrl', ['dep1', function(dep1){ ... }]);
mod.service('myservice', ['dep2', function(dep2){ ... }]);
...
})();
Atau apakah cukup penting untuk peduli? Hanya ingin tahu apa "praktik terbaik" untuk deklarasi modul. Terima kasih sebelumnya.
Jawaban:
Cara 'terbaik' untuk mendeklarasikan modul
Karena angular berada pada cakupan global itu sendiri dan modul disimpan ke variabelnya, Anda dapat mengakses modul melalui
angular.module('mymod')
:Tidak ada variabel global lain yang diperlukan.
Tentu saja itu semua tergantung pada preferensi, tapi saya pikir ini adalah jenis praktik terbaik, sebagai
Opsi untuk menyortir modul dan file Anda
Cara mendeklarasikan dan mengakses modul ini membuat Anda sangat fleksibel. Anda dapat mengurutkan modul melalui tipe fungsi (seperti dijelaskan dalam jawaban lain) atau melalui rute, misalnya:
Bagaimana Anda memilahnya pada akhirnya adalah masalah selera pribadi dan skala serta jenis proyek. Saya pribadi suka mengelompokkan semua file modul di dalam folder yang sama (diurutkan ke dalam sub-folder arahan, pengontrol, layanan, dan filter), termasuk semua file uji yang berbeda, karena membuat modul Anda lebih dapat digunakan kembali. Jadi dalam proyek berukuran menengah saya berakhir dengan modul-dasar, yang mencakup semua rute dasar dan pengontrol, layanan, arahan dan sub-modul yang kurang lebih kompleks, ketika saya pikir mereka dapat berguna untuk proyek lain juga, misalnya :
Untuk proyek yang sangat besar, terkadang saya mengelompokkan modul berdasarkan rute, seperti yang dijelaskan di atas atau dengan beberapa rute utama yang dipilih atau bahkan kombinasi rute dan beberapa komponen yang dipilih, tetapi itu sangat tergantung.
EDIT: Hanya karena itu terkait dan saya bertemu lagi baru-baru ini: Berhati-hatilah karena Anda membuat modul hanya sekali (dengan menambahkan parameter kedua ke angular.module-function). Ini akan mengacaukan aplikasi Anda dan bisa sangat sulit dideteksi.
EDIT 2015 tentang modul penyortiran: Satu setengah tahun pengalaman bersudut nanti, saya dapat menambahkan bahwa manfaat dari menggunakan modul dengan nama yang berbeda dalam aplikasi Anda agak terbatas karena AMD masih tidak benar-benar berfungsi dengan baik dengan Angular dan layanan, arahan, dan filter tersedia secara global dalam konteks sudut ( seperti yang dicontohkan di sini ). Meskipun demikian, masih ada manfaat semantik dan struktural dan mungkin akan membantu jika menyertakan / mengecualikan modul dengan satu baris kode yang diberi komentar masuk atau keluar.
Ini juga hampir tidak pernah masuk akal untuk memisahkan sub-modul berdasarkan jenis (mis. 'MyMapSubModule.controllers') karena mereka biasanya bergantung satu sama lain.
sumber
'use strict';
dalam komponen Anda.module.controller(function () { 'use strict'; ... });
Saya suka panduan gaya sudut oleh Johnpapa, dan berikut beberapa aturan yang terkait dengan pertanyaan ini:
Aturan: Fungsi Bernama vs Anonim
Hindari menggunakan fungsi anonim:
Sebagai gantinya, gunakan fungsi bernama:
Seperti yang dikatakan penulis:
This produces more readable code, is much easier to debug, and reduces the amount of nested callback code.
Aturan: Tentukan 1 komponen per file.
Hindari banyak komponen dalam satu file:
Intead, gunakan satu file untuk mendefinisikan modul:
satu file hanya menggunakan modul untuk mendefinisikan sebuah komponen
dan file lain untuk menentukan komponen lain
Tentu saja, ada banyak aturan lain untuk modul, pengontrol, dan layanan yang cukup berguna dan layak dibaca.
Dan terima kasih atas komentar ya_dimon, kode di atas harus dibungkus dengan IIFE, misalnya:
sumber
Saya baru-baru ini juga mengalami teka-teki ini. Saya telah memulai seperti Anda menggunakan sintaks yang dirantai, tetapi dalam jangka panjang hal itu menjadi berat dengan proyek-proyek besar. Biasanya saya akan membuat modul pengontrol, modul layanan dan seterusnya dalam file terpisah dan menyuntikkannya ke modul aplikasi utama saya yang ditemukan di file lain. Sebagai contoh:
Tapi masing-masing file ini semakin besar seiring dengan pertumbuhan proyek. Jadi saya memutuskan untuk memecahnya menjadi file terpisah berdasarkan masing-masing pengontrol atau layanan. Saya menemukan bahwa menggunakan
angular.module('mod-name').
tanpa array injeksi, adalah apa yang Anda butuhkan agar ini berfungsi. Mendeklarasikan variabel global dalam satu file dan mengharapkannya tersedia di file lain tidak akan berfungsi atau dapat memberikan hasil yang tidak diharapkan.Jadi singkatnya aplikasi saya terlihat seperti ini:
Saya melakukan ini ke file layanan juga, tidak perlu mengubah file modul aplikasi utama Anda masih akan menyuntikkan modul yang sama ke dalamnya.
sumber
angular.module('my-controllers',[]);
(Perhatikan bahwa dia menentukan [] hanya sekali untuk deklarasi). Dia hanya menggunakan kembali ini di file lain. Pemisahan file membuatnya relatif mudah untuk memelihara proyek, terutama yang besar.Praktik lainnya adalah memasukkan pengontrol, arahan, dll ke dalam modul mereka sendiri dan memasukkan modul tersebut ke modul "utama" Anda:
Tidak ada yang tersisa dalam lingkup global.
http://plnkr.co/edit/EtzzPRyxWT1MkhK7KcLo?p=preview
sumber
app.controllers
insted ofcontrollers
sebagai nama modul, Apakah ada keuntungan? Saya seorang pendatang baru di AngularjsSaya suka membagi file dan modul saya.
Sesuatu seperti ini:
app.js
directives.js
service.js
Saya bukan penggemar berat "gaya berantai", jadi saya lebih suka menuliskan variabel saya selalu.
sumber
Saya menyarankan untuk mengikuti Angularjs Style Guide .
Mereka menangani semua konsep mulai dari konvensi penamaan, hingga memodularisasi aplikasi Anda dan sebagainya.
Untuk Angular 2 , Anda dapat memeriksa Angular 2 Style Guide
sumber
Bagi saya, merangkai adalah cara paling ringkas:
Dengan cara itu saya dapat dengan mudah memindahkan komponen antar modul, tidak perlu mendeklarasikan modul yang sama dua kali, tidak memerlukan variabel global.
Dan jika file terlalu panjang, solusinya sederhana - pisahkan menjadi dua file, masing-masing mendeklarasikan modulnya sendiri di bagian atas. Untuk transparansi lebih, saya mencoba untuk menyimpan satu modul unik per file dan menamainya menyerupai path lengkap dari file tersebut. Dengan cara ini juga saya tidak perlu menulis modul tanpa
[]
, yang merupakan masalah umum.sumber