我正在使用$ rootScope在我的应用程序运行函数中初始化一个函数,如下所示:
angular.module('student').run(function($sce,$rootScope, $location,mvNotifier,$http) {
$rootScope.getUser = function(){
var url = '/getUser';
$http({method:'POST',url:url}).success(function(data,status,headers,config){
if(status==200){
$rootScope.user = data;
var date = new Date(data.date);
$rootScope.user.joinMonth=date.toUTCString().split(' ')[2];
$rootScope.user.joinYear=date.getYear();
}
else
mvNotifier.error(data.reason);
});
};
});
现在,当在控制器中时,我正在尝试-
angular.module('student').controller('ProfileController', function($scope,$http,$location,mvNotifier,$rootScope) {
if(!$rootScope.user){
$rootScope.getUser();
}
$scope.firstName = $rootScope.user.firstName;
});
如果已经设置了$ rootScope.user,它将正常工作。但是如果在这种情况下必须调用$ rootScope.getUser(),则会产生错误-
TypeError: Cannot read property 'firstName' of undefined
所以,我想知道可能是因为getUser是一个异步调用,如果这是我如何解决的,如果不是我要去哪里,请提出建议
最佳答案
你可以尝试这样的事情
$rootScope.getUser = function () {
var url = '/getUser';
return $http({
method: 'POST',
url: url,
cache: true /* cache true so we don't have to get from server each time*/
}).then(function (resp) {
var data = resp.data;
$rootScope.user = data;
var date = new Date(data.date);
$rootScope.user.joinMonth = date.toUTCString().split(' ')[2];
$rootScope.user.joinYear = date.getYear();
return $rootScope.user;
}, function(err){
alert('OOps server errror')
});
};
在控制器中:
$rootScope.getUser().then(function(user){
$scope.firstName = user.firstName;
});
关于javascript - 观看angularjs $ rootScope变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27577284/