Ho una chiamata ajax all'interno di .run() che carica una variabile in $ rootScope Tale variabile è necessaria nel controller associato a una vista. A volte durante l'aggiornamento (F5) nel momento in cui viene caricato .controller non c'è nulla all'interno di $ rootScope.SuperCategories.Angular .controller() viene eseguito prima di .run() AngularJS
sampleApp.factory('SuperCategoryService', ['$http', '$q', '$rootScope', function ($http, $q, $rootScope){
var SuperCategoryService = {};
SuperCategoryService.SuperCategories = $rootScope.SuperCategories;
alert ($rootScope.SuperCategories);
return SuperCategoryService;
}]);
sampleApp.run(function($rootScope, $q, $http) {
var req = {
method: 'POST',
url: 'SuperCategoryData.txt',
//url: 'http://localhost/cgi-bin/superCategory.pl',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }//,
//data: { action: 'GET' }
};
$rootScope.SuperCategories = [];
$rootScope.GetSuperCategories = function() {
var defer = $q.defer();
$http(screq).then(function(response) {
$rootScope.SuperCategories = response.data;
//alert ($rootScope.SuperCategories);
defer.resolve($rootScope.SuperCategories);
}, function(error) {
defer.reject("Some error");
});
return defer.promise;
}
$rootScope.GetSuperCategories();
});
Come risolvere questo bug.
Quando si dice che non c'è nulla nel servizio, si intende 'undefined' o' [] '? Se il più tardi, è perché la tua promessa non è ancora stata risolta. – floribon
È vuoto [] .. Puoi aiutare come risolvere la promessa. –