Oleh kerana saya fikir kilang itu adalah singleton, saya menggunakan hasil http sebagai nilai pulangan kilang. Bagaimanakah saya boleh menetapkan nilai awal kepada kilang dengan $http semasa pemulaan sudut? angular.module('some',[])
.factory('factory',function($http){
var some = {};
$http.get('url')
.success(function(resp){
some.data = resp;
})
return some.data;
})
Sekarang ia ditulis seperti ini. Saya berharap apabila sudut dimulakan, ia boleh mengambil beberapa nilai dari pelayan dan terus menggunakan
Saya percaya anda juga telah mendapati bahawa masalah dengan penulisan anda ialah pemerolehan data adalah tidak segerak.
some.data
Pada mulanya masihundefined
. Tetapi intuisi anda betul: data biasa harus diletakkan di dalamfactory
atauservice
. Kini untuk menyelesaikan masalah tak segerak, terdapat tiga penyelesaian:Tukar kepada penyegerakan. Ini ialah penyelesaian yang paling langsung. Data yang diperlukan dipaparkan secara langsung dalam templat pada bahagian pelayan
factory
mendapatkan data daripada HTML, biasanya menggunakan teginput
. Mengikut garis pemikiran ini, cara yang lebih baik ialah menyediakan sumber sebelum memulakan Apl Sudut. Anda boleh merujuk artikel ini: http://harttle.github.io/2015/05/31/angular-scope-initialize.html#1Panggil balik tak segerak. Gunakan
factory
untuk mengembalikan fungsi panggil balik, seperti ini:Gunakan mod Promise/Deffered untuk operasi tak segerak. Apabila projek menjadi semakin kompleks, Janji adalah penyelesaian muktamad. Angular menyediakan pelaksanaan corak ini
$q
, iaitu Perkhidmatan, dan$http.get
akan mengembalikan contoh Promise. Digunakan seperti ini:angular.run(fn)
angularjs $http tidak menyokong pemerolehan segerak
Ingin memulakan atau mengeluarkan respons.tulis dari hujung belakang ke hujung hadapan
Atau gunakan penyekatan ajax jquery untuk mendapatkan data dan kemudian mulakan sudut
Untuk penghalaan, anda boleh menggunakan resolusi untuk menyuntik pengawal
http://stackoverflow.com/questions/16286605/initialize-angularjs-servi...
Terdapat beribu-ribu kaedah permulaan yang penting bukanlah sama ada nilai yang anda inginkan diperoleh secara serentak atau tidak segerak, tetapi di mana dan bila anda menggunakannya? Orientasi matlamat menentukan kaedah yang anda gunakan untuk permulaan. Sudah tentu menggunakan janji disyorkan dalam kebanyakan kes.