Angular$http返回数据,但不返回'不适用于范围
Angular $http returns data but doesn't apply to scope
在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('SessionsCtrl', function($scope, Users) {
$scope.users = Users.getUsers();
})
如果我console.log来自http请求的响应,我将获得数据,但由于某种原因,范围数据不会更新。
我见过控制器看起来像的例子
Users.getUsers().then(function(data) {
$scope.users = data;
});
但据我所知,我不应该这么做,因为$http
已经返回了一个承诺。我是不是错过了什么?我需要参与$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;
});
您的getUsers
函数仍然返回promise,因为它返回了$http.get
的值。所以,是的,您分配给$scope.users
的值是一个承诺。根据上面的示例,您必须处理将值设置为$scope.users
的承诺:
Users.getUsers().then(function(data) {
$scope.users = data;
});
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- Firefox使用JQuery返回不正确的JSON
- 递归函数返回不正确
- 使用动态键返回不可变状态
- 使用共享工具提示时,单击Highcharts柱形图会返回不正确的序列索引
- 偏移宽度返回不正确的值
- 返回不会退出 javascript 中的递归函数
- 从承诺返回不返回函数会导致警告
- CSS 类在特定场景中不适用
- Regex:如何返回不在括号中的匹配项
- tagName在IE 11中返回带命名空间的大写名称,而IE 7返回不带命名空间的小写名称
- DataView getFloat32返回不正确但近似的数字
- 黑莓网站:窗口大小(窗口高度)在黑莓模拟器中返回不正确的值
- 自定义查询字符串分析器返回不正确的结果
- ng类不适用
- Internet Explorer CSS类样式没有'如果存在具有相同类名的其他元素,则不适用
- Angular promise从JSON API返回不正确的数据
- $(this).val() 返回不正确的值 IE8
- Javascript split() Regex 表达式在 Chrome 中返回不需要的逗号
- NodeJS > req.query 返回不正确的数据