Angularjs $http.get 服务没有返回数据给调用控制器函数

Angularjs $http.get service not returning data to calling controller function

大家好我确信这个问题有一个简单的解决方案,但我自己似乎找不到...

我有一个控制器,它通过调用定义为 GetDataService

的服务将数据分配给 $scope.items 变量
$scope.items = GetDataService.getData('/getBroadcastSourceList/1');

服务设置如下:

angular.module('appName')
  .service('GetDataService', function($http, WebServiceURL) {
    this.getData = function(ServiceParameter) {
      $http.get(WebServiceURL + ServiceParameter)
        .then(function(res){
          return res.data;
        });
    };
  });

我在 GetDataService 中单步执行了我的代码,可以看到 res.data 确实包含所有相关数据,但是这些数据没有发送到我的控制器中的 $scope.items。

我还通过如下更改我的服务来检查我的控制器端是否一切正常:

angular.module('appName')
      .service('GetDataService', function($http, WebServiceURL) {
        this.getData = function(ServiceParameter) {
           return [{
                     Day: "Monday",
                     Language: "English "
                   }]
        };
      });

这确实填充了 $scope.items,所以问题一定出在此处:

$http.get(WebServiceURL + ServiceParameter)
        .then(function(res){
          return res.data;
        });

我做错了什么?

$http 服务本质上是异步的,因此您需要在回调中分配数据

GetDataService.getData('/getBroadcastSourceList/1').then(function(data) {
  $scope.items=data;
})

另外你的服务没有return,添加它。

this.getData = function(ServiceParameter) {
      return $http.get(WebServiceURL + ServiceParameter)

您没有在服务的 getData 方法上重新调整任何内容尝试return一个承诺

angular.module('appName')
  .service('GetDataService', function($http, $q WebServiceURL) {
    this.getData = function(ServiceParameter) {
var defer = $q.defer();
      $http.get(WebServiceURL + ServiceParameter)
        .then(function(res){
         defer.resolve(res.data);
        }, function (err) { defer.reject(err)});
return defer.promise;
    };