在$ locationChangeStart事件处理程序执行之前,确保从服务器加载了一些对象

时间:2013-12-04 21:37:55

标签: angularjs angularjs-service angularjs-routing

我有一个绑定到$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事件处理程序之前,我该怎么做才能确保加载用户对象?

0 个答案:

没有答案