【发布时间】:2015-09-23 21:19:51
【问题描述】:
我有以下代码,其中controller 使用factory 函数通过api 请求获取用户数据。
控制器
myApp.controller('UserApiCtrl', function($scope,$auth,Account){
$scope.getProfile = function(){
Account.getProfile()
.then(function(response){
$scope.user = response.data;
})
.catch(function(response){
// errors handled here
})
};
$scope.getProfile();
})
工厂
angular.module('MyApp')
.factory('Account', function($http){
return {
getProfile: function(){
return $http.get('/api/me');
}
}
});
现在在控制器中,当我console.log(response.data) 时,json 数据可用,但当我 console.log($scope.getProfile()) 时,它是未定义的。
谢谢!!
【问题讨论】:
-
因为你的函数没有返回任何值。您应该在成功回调时返回值/对象。
-
@Vineet return $scope.user 不起作用..
-
调用 Account.getProfile() 是异步的,您对 $scope.getProfile() 的调用不会等到执行回调。即使你在 callbak 中返回了一些东西,也没有人能抓住它。
-
这看起来是异步函数的正常预期行为。异步函数的全部意义在于允许您的代码在等待某事(在本例中为来自服务器的响应)时继续执行其他工作。
.then块中的任何事情都将在 未来 发生,任何外部的事情发生在 现在,你不能现在记录你期望在未来发生的事情。 -
在 Angular 的情况下,因为 Angular 在
$scope上创建了一个事件观察器,当未来事件完成时($scope.user填充了一个值),那么 Angular 将运行$digest和更新 DOM。
标签: javascript angularjs