我正在尝试将变量设置为以角度为单位从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;
}
但你好仍然是空白。我错过了一些明显的东西吗?
答案 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;
});
}