我无法在$ http之后获取数据,但它可以在html中获取数据 我在服务中写了$ http 这是代码
service.js:
angular.module('todoApp.services', []).factory('TodoService', function($http) {
return {
get_default_data: function($scope, url, par) {
this.send(url, par).success(function(data) {
$scope.data = data;
});
}
})
我在那里使用它
todoApp.controller('WeekCtrl', function($scope, $http, TodoService) {
TodoService.get_default_data($scope, 'get_default_data', {
'type': 'week'
});
这是问题:
我console.log($scope.data)
在那里:
get_default_data: function($scope, url, par) {
this.send(url, par).success(function(data) {
$scope.data = data;
console.log($scope.data)
});
},
它可以显示正常,但我console.log
在那里
TodoService.get_default_data($scope, 'get_default_data', {
'type': 'week'
});
console.log($scope.data)
它在控制台中显示undefined
!
为什么?
如何在那里获得$scope.data
?
答案 0 :(得分:1)
TodoService.get_default_data
是异步的,这意味着它不会等待HTTP请求完成,然后再转到下一行。
所以当你在console.log上调整范围内的数据时,由于HTTP请求尚未完成,因此尚未完成,并且没有响应,因此$scope.data = data;
行尚未运行
考虑到Satpal在评论中所说的内容,您可以重构代码以将承诺返回给控制器并将数据分配到范围:
<强>服务强>
get_default_data: function($scope, url, par) {
return this.send(url, par);
}
<强>控制器:强>
TodoService.get_default_data($scope, 'get_default_data', {
'type': 'week'
}).success(function(data) {
$scope.data = data;
});