Я пытаюсь установить значение в $rootScope в .run() и пытаюсь получить его в службе, но похоже, что оно не определено. Все остальное в .run() и в сервисе работает нормально.
.run(function($ionicPlatform, $translate, $rootScope) {
document.addEventListener("deviceready",function(){ onDeviceReady($rootScope); }, false);
function onDeviceReady($rootScope) {
if(typeof navigator.globalization !== "undefined") {
navigator.globalization.getPreferredLanguage(function(language) {
$rootScope.language='en'; //(language.value).split('-')[0];
$translate.use((language.value).split("-")[0]).then(function(data) {
console.log("SUCCESS -> " + data);
}, function(error) {
console.log("ERROR -> " + error);
});
}, null);
}
}
})
.service('Webcache', function ($http, $q, apiHost, $rootScope) {
return {
getDataBySection: function (section, version, params) {
var params = params || {};
var host = apiHost;
var deferred = $q.defer();
var start = new Date().getTime();
params.lang = $rootScope.language;
$http.get('http://'+ host +'/api/'+ version +'/'+ section, {
cache: true,
params: params
}).success(function (response) {
deferred.resolve(response);
}).error(function (response){
deferred.resolve(false);
});
return deferred.promise;
}
};
})
deviceReady
не сработало в тот момент, когда вы пытаетесь его использовать. Лучшим решением было бы переместить язык из области видимости в службу и заставить службу использовать обещания для доступа к текущему языку (так что методgetLanguage()
возвращает обещание. Кроме того, не используйте устаревшиеsuccess
,error
методы на результат$http.get
, просто используйтеthen()
, и вы можете напрямую вернутьresponse
. - person Duncan   schedule 01.02.2016