Angular Service数据未在$ scope

时间:2016-04-16 15:46:26

标签: javascript angularjs angularjs-scope

我无法使用该服务更新控制器中的数据。我想在我的服务中做一个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使用服务。我之前在论坛上提过了一个问题,这就是我作为回复所得到的。当我使用来自服务功能的返回数据并在控制器本身中进行数据处理时,它可以工作。 你能帮忙吗?

2 个答案:

答案 0 :(得分:0)

看起来您在获得响应后再次调用myService服务来设置sr $ scope。相反,将$ 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);
});
}]);

答案 1 :(得分:0)

抱歉这很好用。在拨打电话时我犯了一个错误。因此没有提供正确的数据。谢谢你的帮助:))