角度设置变量作为对象通过http

时间:2016-08-02 13:47:54

标签: javascript angularjs

我正在尝试将变量设置为以角度为单位从http请求返回的数据对象,但即使变量位于$scope中,变量也永远不会设置,除非它嵌套在success函数中。例如,如果我在控制器中执行此操作:

    $scope.hello = [];
       var getAppointmentsurl = './dbscripts/getAppointments.php';

          $http({method: 'GET', url: getAppointmentsurl}).success(function(data) {

                $scope.hello = data;
          });

          console.log($scope.hello);

}

Hello是空白的...所以我在services.js中设置了这样的:

 this.getCalendarData=function(){
        var hello = [];
           var getAppointmentsurl = './dbscripts/getAppointments.php';

              $http({method: 'GET', url: getAppointmentsurl}).success(function(data) {

                    hello = data;
              });

              return hello;

    }

但你好仍然是空白。我错过了一些明显的东西吗?

编辑 - enter image description here

3 个答案:

答案 0 :(得分:2)

 this.getCalendarData=function(){
       var getAppointmentsurl = './dbscripts/getAppointments.php';

          return $http({method: 'GET', url: getAppointmentsurl}).success(function(data) {

                return data;
          });


}

这是异步调用,我们必须返回上面的数据。

答案 1 :(得分:0)

当您将api调用作为服务中的方法时,从服务返回的数据尚未解析,因此在控制器中,服务返回只是一个承诺

serviceName.getCalendarData().then(function(data){

   //Success data
},function(){});

服务代码必须像下面的代码一样返回,在这里你将得到整个响应对象,

return $http({method: 'GET', url:getAppointmentsurl});

另一种直接解析数据的方法就是从这样的服务中返回

return $http({method: 'GET', url:getAppointmentsurl}).success(function(data){

    return data;
});

答案 2 :(得分:0)

详细说明阿卡什的正确答案,这是一个如何运作的例子。

在您的视图中,您应该添加逻辑以仅在hello存在时显示数据。即ng-if="hello"

控制器:

ServiceName.getCalendarData().then(function(response) {
  $scope.hello = response;
});

服务:

this.getCalendarData = function() {
  return $http.get('path/to/response/').success(function(data) {
    return data;
  });
}