Я инициализирует функцию в моем приложении функции запуска с $ 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;
});
It отлично работает, если $ rootScope.user уже установлен. но если он должен сделать вызов $ rootScope.getUser() в этом случае он дает ошибку -
TypeError: Cannot read property 'firstName' of undefined
Итак, я задаюсь вопросом, может быть его потому, что GetUser асинхронный вызов, если это как я это исправить, и если это не там, где я буду неправильно, пожалуйста, предложите
все '$ http' асинхронны. Мое предложение состоит в том, чтобы переписать 'getUser', чтобы вернуть обещание' $ http' и использовать 'then' в контроллере. Вы можете кэшировать запрос, чтобы он не ударял сервер каждый раз – charlietfl
, что я думал, но как исправить ошибку и применить $ scope.firstName после вызова $ scope.getUser завершен –