角度来说,我有这个工厂
.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;
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句