Saya sedang membaca artikel ini: http://eviltrout.com/2013/06/15/ember-vs-angular.html
Dan katanya,
Karena kurangnya konvensi, saya bertanya-tanya berapa banyak proyek Angular bergantung pada praktik buruk seperti panggilan AJAX langsung di dalam pengontrol? Karena injeksi ketergantungan, apakah pengembang menyuntikkan parameter router ke arahan? Apakah pengembang AngularJS pemula akan menyusun kode mereka dengan cara yang oleh pengembang AngularJS berpengalaman dianggap idiomatik?
Saya sebenarnya $http
menelepon dari pengontrol Angular.js saya. Mengapa itu praktik yang buruk? Apa praktik terbaik untuk melakukan $http
panggilan itu? dan mengapa?
Jawaban:
EDIT: Jawaban ini terutama berfokus pada versi 1.0.X. Untuk mencegah kebingungan, ini sedang diubah untuk mencerminkan jawaban terbaik untuk SEMUA versi Angular saat ini pada hari ini, 2013-12-05.
Idenya adalah untuk membuat layanan yang mengembalikan janji ke data yang dikembalikan, kemudian memanggilnya di controller Anda dan menangani janji di sana untuk mengisi properti $ scope Anda.
Layanan
Pengendali:
Tangani metode janji
then()
dan dapatkan data darinya. Setel properti $ scope, dan lakukan apa pun yang mungkin perlu Anda lakukan.Resolusi Janji Dalam-Pandangan (hanya 1.0.X):
Dalam Angular 1.0.X, target dari jawaban asli di sini, janji-janji akan mendapat perlakuan khusus oleh View. Ketika mereka menyelesaikan, nilai yang diselesaikan akan terikat pada tampilan. Ini telah ditinggalkan dalam 1.2.X
sumber
$scope.foos
properti dalam templat. Jika Anda menggunakan properti yang sama di luar templat (misalnya dalam fungsi lain), objek yang disimpan masih ada objek janji..then()
janji itu dan memasukkan nilainya dalam $ scope ...myService.getFoos().then(function(value) { $scope.foos = value; });
Praktik terbaik adalah dengan abstrak
$http
panggilan keluar menjadi 'layanan' yang menyediakan data ke controller Anda:Abstraksi
$http
panggilan seperti ini akan memungkinkan Anda untuk menggunakan kembali kode ini di beberapa pengontrol. Ini menjadi penting ketika kode yang berinteraksi dengan data ini menjadi lebih kompleks, mungkin Anda ingin memproses data sebelum menggunakannya di controller Anda, dan menyimpan hasil cache dari proses itu sehingga Anda tidak perlu menghabiskan waktu untuk memprosesnya kembali.Anda harus menganggap 'layanan' sebagai representasi (atau Model) data yang dapat digunakan aplikasi Anda.
sumber
Jawaban yang diterima memberi saya
$http is not defined
kesalahan jadi saya harus melakukan ini:Perbedaan utama adalah baris ini:
sumber
Saya memberikan jawaban untuk seseorang yang menginginkan layanan web yang sepenuhnya generik di Angular. Saya sarankan hanya menghubungkannya dan itu akan menangani semua panggilan layanan web Anda tanpa perlu kode semuanya sendiri. Jawabannya ada di sini:
https://stackoverflow.com/a/38958644/5349719
sumber