ho capito come condividere i dati tra due controllori AngularJS utilizzando un servizio condiviso nel esempio inventato qui sotto:condivisione dei dati tra i controllori AngularJS ma avendo i dati condivisi provengono da una chiamata AJAX
(Funzionamento fiddle)
var app = angular.module('myApp', []);
app.factory('UserData', function() {
var data = {foo: 'bar'};
return {
getData: function() {
console.log('getData');
return data;
},
setData: function(newData) {
data = newData;
}
};
});
function MainCtrl($scope, UserData) {
console.log('MainCtrl');
console.log(UserData.getData());
}
MainCtrl.$inject = ['$scope', 'UserData'];
function JobListCtrl($scope, UserData) {
console.log('JobListCtrl');
console.log(UserData.getData());
}
JobListCtrl.$inject = ['$scope', 'UserData'];
il mio problema è che mi piacerebbe che i dati contenuti nel UserData
provenire da una chiamata AJAX (presumibilmente usando $http
).
ho provato a fare la chiamata Ajax nella funzione fabbrica UserData
ma, dal momento che è in esecuzione in modo asincrono, MainCtrl
e JobListCtrl
vengono eseguiti prima che il servizio UserData
ha effettivamente tutti i dati in esso.
Qualcuno può darmi qualche direzione su come configurare il monitoraggio?
Vedere http://stackoverflow.com/questions/12505760/angularjs-processing-http-response-in-service/12513509#12513509 su come utilizzare una promessa e quindi attendere che il controller venga risolto. –
@MarkRajcok, questo ha fatto il trucco. Grazie! –