我有一个绑定到$location
的{{1}}事件的处理程序。在该偶数处理程序中,需要来自服务器的一些用户对象。下面是我的代码(简化):
$locationChangeStart
上述代码的问题是angular.module('myApp', [])
.factory('userSrv', function($http) {
var currentUser = null;
var service = {
loadUser: function() {
$http.get('/api/load_user', function(user) {
currentUser = user;
});
},
isLoggedIn: function() {
return !!currentUser;
}
};
return service;
})
.run(function($rootScope, userSrv) {
userSrv.loadUser(); // load user info
$rootScope.$on('$locationChangeStart', function(ev, next, current) {
// alway false because the $http call in loadUser() has not being resolved at this point.
if (userSrv.isLoggedIn()) {
console.log('User is logged in. Please proceed');
}
else {
console.log('Login first');
}
});
});
事件处理程序在$locationChangeStart
完成从服务器加载用户对象之前执行。因此,userSrv
即使确实应该userSrv.isLoggedIn()
,也会返回false
。
请注意,用户对象只需加载一次,因为它会在整个浏览会话中缓存。在执行true
事件处理程序之前,我该怎么做才能确保加载用户对象?