2016-04-16 78 views
1

我無法使用服務更新控制器中的數據。我想在我的服務中做一個http.get,對數據做一些處理,然後更新控制器的$ scope。 我有一個像下面這樣的角度服務。從我在論壇中閱讀的答案中,我的數據應該在視圖中更新。但那沒有發生。

app.service('myService', function($http, $rootScope) { 
this.selected = { 
     item: '' 
} 
this.getData = function(key){ 
    return $http.get('/myapp/stocklist/'+key); 
} 
this.gs = []; 
this.sr = []; 
this.siri=[]; 
var vm=this; 

this.cleanData = function(response){ 
    for(var i=0; i<response.data.length; i++) { 
     vm.gs.push(response.data[i].name); 
     vm.sr.push(response.data[i].high); 
    }      
    vm.siri.push(vm.sr); 
} 
}); 

這裏是控制器。 gs和sr變量是空格。從我讀的東西我不需要使用手錶這個和下面的代碼應該工作(我不清楚如何使用手錶以及)。如果這可以與手錶一起工作,那麼請告訴我該怎麼做。

app.controller('graph', ['$scope', '$http', 'myService', function($scope,$http, myService) { 
$scope.mySelected = myService.selected; 
console.log($scope.mySelected); 
myService.getData($scope.mySelected).then(function(response){ 
    myService.cleanData(response); 
    $scope.sr=myService.siri; 
    $scope.gs=myService.gs; 
    console.log(myService.sr); 
}); 
}]); 

我是新來的角,也可能以錯誤的方式構造代碼。我也很感激任何設計建議。

我也想知道如果我正在使用$ http.get的正確方式服務。我之前在論壇上提過一個問題,這就是我的回覆。當我使用服務函數返回的數據並在控制器本身中進行數據處理時,它可以工作。 你能幫忙嗎?

+0

請檢查這個查詢http://stackoverflow.com/questions/36663503/invoke-one-controller-from-another/36663536?noredirect=1#comment60919252_36663536 – user3045179

+0

如果你把一個'控制檯.log(response)'在你的'myService.cleanData(response)'之前是否有對象中的任何東西?如果是這樣,那麼'console.log(response)'作爲myService'' this.cleanData'方法中的第一行怎麼樣?對象中仍然有東西。 – Lex

+0

@sachin不工作。?檢查這個http://plnkr.co/edit/TRpa9540r8TPcMJeYhwY?p=preview它正在爲我工​​作。 – sreeramu

回答

0

看起來您再次調用myService服務來獲取響應後設置sr $範圍。相反,將$ scope.sr和$ scope.gs分別設置爲response.siri和response.gs。更新代碼如下:

app.controller('graph', ['$scope', '$http', 'myService', function($scope,$http, myService) { 
$scope.mySelected = myService.selected; 
console.log($scope.mySelected); 

myService.getData($scope.mySelected).then(function(response){ 
    $scope.cleanData = response; 
    $scope.sr = response.siri; 
    $scope.gs = response.gs; 
    console.log($scope.sr); 
}); 
}]); 
0

對不起,這工作正常。我在撥打電話時犯了一個錯誤。因此沒有給出正確的數據。謝謝你的幫助:)