gpt4 book ai didi

javascript - Angular $http 返回数据但不适用于范围

转载 作者:行者123 更新时间:2023-11-30 12:28:08 27 4
gpt4 key购买 nike

在 Angular 上,我有这个工厂

.factory('Users', function($http) {
var users = [];

return {
getUsers: function() {
return $http.get("data.json")
.then(function(response) {
users = response.data;
return users;
});
},
getUser: function(id) {
for (i = 0; i < users.length; i++) {
if (users[i].id == id) {
return users[i];
}
}
return null;
}
}
})

然后将该数据加载到我的 Controller 中

.controller('SessionsCtrl', function($scope, Users) {
$scope.users = Users.getUsers();
})

如果我 console.log 来自 http 请求的响应,我正在获取数据,但由于某种原因,范围数据不会更新。

我见过 Controller 看起来像这样的例子

Users.getUsers().then(function(data) {
$scope.users = data;
});

但根据我的理解,我不需要这样做,因为 $http 已经返回了一个 promise 。我错过了什么吗?我需要涉及 $q 吗?

最佳答案

这会起作用:

 getUsers: function() {
return $http.get("data.json");
},

和:

Users.getUsers().then(function(data) {
$scope.users = data.data;
});

然而,您编写的内容将不起作用,仅仅是因为您无法直接从稍后将完成的操作(例如 $http 调用)返回结果。这个问题:

 getUsers: function() {
return $http.get("data.json")
.then(function(response) {
users = response.data;
return users;
});
},

是不是在 return users; 行执行时,ajax 调用仍在进行中并且尚未返回任何内容,因此您不会为用户获得任何信息。对于你想要做的事情,我会去使用回调:

 getUsers: function(callback) {
$http.get("data.json")
.then(function(response) {
users = response.data;
callback(users);
});
},

用法:

Users.getUsers(function(data) {
$scope.users = data;
});

关于javascript - Angular $http 返回数据但不适用于范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655195/

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