Saya memiliki semua pengontrol AngularJS saya dalam satu file, controllers.js. File ini disusun sebagai berikut:
angular.module('myApp.controllers', [])
.controller('Ctrl1', ['$scope', '$http', function($scope, $http) {
}])
.controller('Ctrl2', ['$scope', '$http', function($scope, $http) }
}])
Yang ingin saya lakukan adalah meletakkan Ctrl1 dan Ctrl2 ke file terpisah. Saya kemudian akan memasukkan kedua file di index.html saya, tetapi bagaimana seharusnya itu disusun? Saya mencoba melakukan beberapa hal seperti ini dan melempar kesalahan di konsol browser web dengan mengatakan tidak dapat menemukan pengontrol saya. Ada petunjuk?
Saya mencari StackOverflow dan menemukan pertanyaan serupa - namun, sintaks ini menggunakan kerangka kerja yang berbeda (CoffeeScript) di atas Angular, jadi saya belum bisa mengikuti.
sumber
appCtrl
adalah global Andawindow.appCtrl
. Itu bukan praktik yang baik.Menggunakan API angular.module dengan array di bagian akhir akan memberi tahu angular untuk membuat modul baru:
myApp.js
Menggunakannya tanpa array sebenarnya adalah fungsi pengambil. Jadi untuk memisahkan pengontrol Anda, Anda dapat melakukan:
Ctrl1.js
Ctrl2.js
Selama impor javascript Anda, pastikan myApp.js adalah setelah AngularJS tetapi sebelum pengontrol / layanan / dll ... jika tidak, sudut akan tidak dapat menginisialisasi pengontrol Anda.
sumber
Meskipun kedua jawaban secara teknis benar, saya ingin memperkenalkan pilihan sintaks yang berbeda untuk jawaban ini. Imho ini membuatnya lebih mudah untuk membaca apa yang terjadi dengan injeksi, membedakan antara dll.
File Satu
File Dua
File Tiga
sumber
Bagaimana dengan solusi ini? Modul dan Pengendali dalam File (di akhir halaman) Ini berfungsi dengan banyak pengontrol, arahan, dan sebagainya:
app.js
myCtrl.js
html
Google juga memiliki Rekomendasi Praktik Terbaik untuk Struktur Aplikasi Sudut Saya sangat suka mengelompokkan berdasarkan konteks. Tidak semua html dalam satu folder, tetapi misalnya semua file untuk masuk (html, css, app.js, controller.js, dan sebagainya). Jadi jika saya mengerjakan modul, semua arahan lebih mudah ditemukan.
sumber
Untuk singkatnya, inilah sampel ES2015 yang tidak bergantung pada variabel global
sumber
name
.. jadi Anda bisa menggunakanExampleCtrl.name
alih-alih dupl .. melipatgandakannya.Tidak begitu anggun, tetapi sangat sederhana dalam solusi implementasi - menggunakan variabel global.
Dalam file "pertama":
di "kedua", "ketiga", dll:
sumber
angular.module('myApp').controller('ProductCtrl', ['$scope', '$http', function($scope, $http){ //Your ProductCtrl code goes here }]);