gpt4 book ai didi

javascript - angularJS 为什么我在 $http 之后无法获取数据

转载 作者:行者123 更新时间:2023-12-03 10:04:25 24 4
gpt4 key购买 nike

$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)

它在控制台中显示未定义!为什么?我怎样才能在那里得到$scope.data

最佳答案

TodoService.get_default_data 是异步的,这意味着它不会等待 HTTP 请求完成才转到下一行。

因此,当您 console.log 作用域上的数据时,它是未定义的,因为 HTTP 请求尚未完成,并且还没有响应,因此 $scope.data = data; 行尚未运行。

考虑到 Satpal 在评论中所说的内容,您可以重构代码以将 promise 返回到 Controller 并将数据分配到那里的范围:

服务:

get_default_data: function($scope, url, par) {
return this.send(url, par);
}

Controller :

TodoService.get_default_data($scope, 'get_default_data', {
'type': 'week'
}).success(function(data) {
$scope.data = data;
});

关于javascript - angularJS 为什么我在 $http 之后无法获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30425434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com