2016-04-15 79 views
1

當我在服務中執行http.get時,我無法使用{{gs}}更新視圖中的$ scope.gs變量。我嘗試閱讀一些答案,但他們似乎暗示了這種方法。請幫助...

我的服務方法如下:

app.service('myService', function($http, $rootScope) { 
this.getData = function(key){ 
    return $http.get('/myapp/stocklist/AMZN'). 
    then(function(data) {  
    return data; 
    }); 
    } 
    //return this; 
}); 

我的控制器:

app.controller('graph', ['$scope', '$http', 'myService', function($scope,$http, myService){ 
myService.getData($scope.mySelected).then(function(codes){ 
$scope.gs= codes; 
}); 
}]); 

我不知道我是否應該使用工廠,而不是服務於這一點。你能諮詢一下嗎?

+0

控制檯錯誤??? – TKHN

回答

0

可以使用$q

app.service('myService', function($http, $rootScope, $q) { 
    return { 
     getData: function (key) { 
      var deffered = $q.defer(); 

      $http.get('/myapp/stocklist/AMZN') 
       .then(function (result) { 
        deffered.resolve(result.data); 
       }, function (error) { 
        deffered.reject(error); 
       }); 

      return deferred.promise 
     } 
    } 
}); 

或調整服務

app.service('myService', function($http, $rootScope, $q) { 
    return { 
     getData: function (key) { 
      $http.get('/myapp/stocklist/AMZN') 
     } 
    } 
}); 
0

然後使用兩次。嘗試

服務

app.service('myService', function($http, $rootScope) { 
    this.getData = function(key){ 
     return $http.get('/myapp/stocklist/AMZN');  
    }); 
}); 

控制器

app.controller('graph', ['$scope', '$http', 'myService', function($scope,$http, myService){ 
    myService.getData($scope.mySelected).then(function(response){ 
      $scope.gs= response.data; 
    }); 
}]); 
+0

嗨Lukszaq,謝謝你的回答。這是行得通的,但我也想對服務中的數據做一些處理,以便我可以在兩個不同的控制器中使用它。再次感謝你。 – sachin

+0

@sachin U可以在你想要的儘可能多的控制器中使用服務。不需要改變它。 – Lukaszaq