我正在尝试使用我的控制器从工厂使用$ http承诺。下面的代码有效,我可以通过调用{{users}}
工作工厂:
.factory('bidsCreatedSimple', ['$http', function($http) {
// Expose public API first, use func notation
return {
getUsers: getUsers,
};
function getUsers(){
return $http.get('/bids.json');
}
}])
在控制器中:
$scope.users = []; //visible in the view
activate();
function activate(){
bidsCreatedSimple.getUsers().then(function(users){
$scope.users = users.data;
});
}
console.log($scope.users); //returns a blank [] even though
//it renders with data in the view
如何在控制器中使用$ scope.users变量?我需要将它的数据用于控制器中的其他一些对象。
答案 0 :(得分:2)
你的代码没问题。
$scope.users
填充数据,但console.log($scope.users)
请求在$http
请求返回之前执行 - 因此您需要控制台。记录您在代码顶部声明的空数组。< / p>
在回调中添加console.log
行,您将看到您的用户(假设数据从您的后端正确返回)
bidsCreatedSimple.getUsers().then(function(users){
$scope.users = users.data;
// here $scope.users is filled with the .json data
console.log($scope.users)
// put here your code to manipulate users (or call a function that does that properly)
});
// here the $scope.users is undefined, because when this line executes, the request from get users hasn't returned yet (and the callback function hasn't executed either)
console.log($scope.users)
这是由于ajax请求中的异步 - 您需要等待数据,直到请求返回才能使用它。