Jika saya memiliki fungsi utilitas foo
yang saya ingin dapat menelepon dari mana saja di dalam ng-app
deklarasi saya . Apakah ada cara saya dapat membuatnya dapat diakses secara global dalam pengaturan modul saya atau apakah saya perlu menambahkannya ke ruang lingkup di setiap pengontrol?
191
module.value('myFunc', function(a){return a;});
dan kemudian menyuntikkannya dengan nama di controller Anda. (Jika seseorang ingin menghindari membuat layanan)Jawaban:
Pada dasarnya Anda memiliki dua opsi, baik mendefinisikannya sebagai layanan, atau menempatkannya pada ruang lingkup root Anda. Saya menyarankan agar Anda membuat layanan untuk menghindari polusi pada ruang lingkup root. Anda membuat layanan dan membuatnya tersedia di controller Anda seperti ini:
Jika itu bukan opsi untuk Anda, Anda dapat menambahkannya ke cakupan root seperti ini:
Dengan begitu, semua templat Anda dapat memanggil
globalFoo()
tanpa harus meneruskannya ke templat dari controller.sumber
foo()
fungsi? Membuat$scope.callFoo()
pembungkus untuk masing-masing adalah terlalu banyak pekerjaan. Bagaimana saya bisa "melampirkan" semua fungsi perpustakaan ke dalam ruang lingkup sehingga dapat digunakan dalam templat? Saya memiliki perpustakaan konversi unit besar yang saya inginkan tersedia di template saya.$scope.callFoo = myService.foo;
di tempat membuat pembungkus baru di setiap tempat yang ingin Anda gunakan.Anda juga dapat menggabungkannya, saya kira:
sumber
$rootScope
?Meskipun pendekatan pertama dianjurkan sebagai pendekatan 'sudut', saya merasa ini menambah biaya tambahan.
Pertimbangkan jika saya ingin menggunakan fungsi myservice.foo ini di 10 pengontrol yang berbeda. Saya harus menentukan dependensi 'myService' ini dan kemudian properti scope $ scope.callFoo di dalam semuanya. Ini hanyalah pengulangan dan entah bagaimana melanggar prinsip KERING.
Sedangkan, jika saya menggunakan pendekatan $ rootScope, saya menetapkan fungsi global ini hanya satu kali dan global akan tersedia di semua pengontrol masa depan saya, tidak peduli berapa banyak.
sumber
AngularJs memiliki " Layanan " dan " Pabrik " hanya untuk masalah seperti milik Anda. Ini digunakan untuk memiliki sesuatu yang global antara Pengontrol, Arahan, Layanan Lain atau komponen angular lainnya .. Anda dapat menentukan fungsi, menyimpan data, membuat fungsi penghitungan, atau apa pun yang Anda ingin di dalam Layanan dan menggunakannya dalam AngularJs Components sebagai Global .like
jika Anda membutuhkan lebih banyak
Temukan Lebih Banyak Tentang Mengapa Kami Membutuhkan Layanan dan Pabrik Angular
sumber
Saya sedikit lebih baru untuk Angular tetapi apa yang saya temukan berguna untuk dilakukan (dan cukup sederhana) adalah saya membuat skrip global yang saya muat ke halaman saya sebelum skrip lokal dengan variabel global yang perlu saya akses di semua halaman. Dalam skrip itu, saya membuat objek yang disebut "globalFunctions" dan menambahkan fungsi yang saya perlu akses secara global sebagai properti. mis
globalFunctions.foo = myFunc();
. Kemudian, di setiap skrip lokal, saya menulis$scope.globalFunctions = globalFunctions;
dan saya langsung memiliki akses ke fungsi apa pun yang saya tambahkan ke objek globalFunctions dalam skrip global.Ini sedikit solusi dan saya tidak yakin itu membantu Anda, tetapi itu pasti membantu saya karena saya memiliki banyak fungsi dan itu menyakitkan menambahkan semuanya ke setiap halaman.
sumber