Saya menggunakan beberapa data yang berasal dari layanan RESTful di beberapa halaman. Jadi saya menggunakan pabrik sudut untuk itu. Jadi, saya harus mendapatkan data sekali dari server, dan setiap kali saya mendapatkan data dengan layanan yang ditentukan itu. Sama seperti variabel global. Berikut contohnya:
var myApp = angular.module('myservices', []);
myApp.factory('myService', function($http) {
$http({method:"GET", url:"/my/url"}).success(function(result){
return result;
});
});
Di pengontrol saya, saya menggunakan layanan ini sebagai:
function myFunction($scope, myService) {
$scope.data = myService;
console.log("data.name"+$scope.data.name);
}
Ini bekerja dengan baik untuk saya sesuai kebutuhan saya. Tetapi masalahnya di sini adalah, ketika saya memuat ulang di halaman web saya, layanan akan dipanggil lagi dan meminta server. Jika di antara beberapa fungsi lain dijalankan yang bergantung pada "layanan yang ditentukan", Ini memberikan kesalahan seperti "sesuatu" yang tidak ditentukan. Jadi saya ingin menunggu di skrip saya sampai layanan dimuat. Bagaimana saya bisa melakukan itu? Apakah ada cara melakukannya di angularjs?
sumber
function myFunction($scope, myService) { var myDataPromise = myService.getData(); myDataPromise.then(function(result) { $scope.data = result; console.log("data.name"+$scope.data.name); }); console.log("This will get printed before data.name inside then. And I don't want that."); }
bagi orang yang baru mengenal ini, Anda juga dapat menggunakan panggilan balik misalnya:
Dalam layanan Anda:
Di pengontrol Anda:
sumber
FYI, ini menggunakan Angularfire sehingga mungkin sedikit berbeda untuk layanan yang berbeda atau penggunaan lain tetapi harus menyelesaikan isse yang sama dengan $ http. Saya memiliki masalah yang sama, satu-satunya solusi yang paling cocok untuk saya adalah menggabungkan semua layanan / pabrik menjadi satu janji pada ruang lingkup. Pada setiap rute / tampilan yang membutuhkan layanan ini / dll untuk dimuat, saya meletakkan fungsi apa pun yang memerlukan data yang dimuat di dalam fungsi pengontrol yaitu myfunct () dan app.js utama dijalankan setelah auth saya letakkan
dan dalam tampilan yang baru saja saya lakukan
di first / parent view element / wrapper sehingga pengontrol dapat menjalankan semua yang ada di dalamnya
tanpa mengkhawatirkan masalah janji / pesanan / antrian async. Saya harap itu membantu seseorang dengan masalah yang sama dengan saya.
sumber
Saya mengalami masalah yang sama dan tidak ada jika ini berhasil untuk saya. Inilah yang berhasil ...
dan kemudian fungsi yang menggunakannya adalah ...
Layanan ini tidak terlalu penting tetapi saya pikir ini adalah praktik yang baik untuk ekstensibilitas. Sebagian besar dari apa yang Anda perlukan untuk satu keinginan untuk yang lain, terutama saat menggunakan API. Pokoknya saya harap ini membantu.
sumber