我試圖從URL中獲取一些數據,將其存儲在一個變量中並將其返回給我的控制器。但問題是,在變量已經被返回給控制器(調用該函數)後,處理來自URL的數據。我打電話我Service.js服務URL 這裏是我正在做它:如何將服務URL數據傳遞給控制器調用的函數
var demoService = angular.module('demoService', []).service('myService', function($http, $q) {
var gaugeData = {
maxValue: 5000,
animationSpeed: 100,
val: 5000
};
console.log(gaugeData);
var deferred = $q.defer();
$http.get('http://myurl').then(function(data) {
console.log(data.data.Tweets[3].FAVOURITE_COUNT);
var gaugeData = {
maxValue: 5000,
animationSpeed: 100,
val: data.data.Tweets[3].FAVOURITE_COUNT
};
deferred.resolve(gaugeData);
console.log(gaugeData);
});
this.get = function() {
deferred.promise.then(function(data) {
console.log(data);
gaugeData.val = data.val;
});
return gaugeData;
};
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds) {
break;
}
}
}
this.list = function() {
return gaugeData;
};
});
控制器預計,在相同的形式gaugeData
對象數據,但由於gaugeData
被填滿服務數據在該值已經返回後,控制器顯示沒有對象(undefined)。控制檯看起來像這樣:
Object {maxValue: 5000, animationSpeed: 100, val: 5000}
controllers.js:202 $…t.l.$…w.a.$…e.$$ChildScope {$$childTail: null, $$childHead: null, $$nextSibling: null, $$watchers: null, $$listeners: Object…} (console.log); from controller
app.js:15 TypeError: Cannot read property 'maxValue' of undefined (since an empty value is passed)
1566
services.js:137 Object {maxValue: 5000, animationSpeed: 100, val: 1566}
services.js:144 Object {maxValue: 5000, animationSpeed: 100, val: 1566}
顯然,控制首先進入該服務,然後在正在處理的URL,則控制跳轉到控制和取空值並在此之後已經發生的URL被處理並gaugeData
獲得來自服務URL的值。 我試圖做這個沒有承諾和推遲。我只是使用$http.get(url).success(function(){code});
如何將我的URL數據傳遞給變量並在正確的時間將其正確傳遞給控制器?
而且,這裏是我的控制器代碼段我打電話的服務功能:
console.log($scope);
return $scope.gaugeHome ={
gaugeData:
myService.get(), .....
'this'裏面的'then'是窗口對象,這是嚴格模式下的錯誤 - 以嚴格模式運行你的代碼:) –
@BenjaminGruenbaum - 作者在'then'裏面並沒有'this'。剛剛有縮進(現在修復)。 ;-) –