angularjs-$locationChangeStart-rootScope上的数据集isn';在我的控制器中不可用
我有一个应用程序,如果用户未登录,某些路线将受到限制。这是我的跑步功能:angularjs-$locationChangeStart-rootScope上的数据集isn';在我的控制器中不可用,angularjs,angular-routing,Angularjs,Angular Routing,我有一个应用程序,如果用户未登录,某些路线将受到限制。这是我的跑步功能: function run($rootScope, $location, UserService) { var homeRoute = '/'; $rootScope.$on('$locationChangeStart', function(event, next, current) { var isPageRestricted = $.inArray($location.path(), [
function run($rootScope, $location, UserService) {
var homeRoute = '/';
$rootScope.$on('$locationChangeStart', function(event, next, current) {
var isPageRestricted = $.inArray($location.path(), [homeRoute, '']) === -1;
if (!isPageRestricted) {
return;
}
UserService
.verifyUserToken()
.then(function(data) {
var userData;
if (data.valid) {
$rootScope.userData = $rootScope.userData || UserService.getUserTokenAndData();
} else {
$rootScope.userData = null;
$location.path(homeRoute);
}
})
.catch(function() {
$rootScope.userData = null;
$location.path(homeRoute);
});
});
}
如您所见,当用户进入受限路由时,我向服务器发送一个请求以验证其令牌。如果令牌有效,我将用户数据存储到$rootScope.userData
。然后,在我的一个受限视图中,我得到$rootScope.userData
在开始时为null
,在页面刷新后为非null。我认为这是因为操作的异步性。让它工作的最好方法是什么
谢谢。试图使用
$rootScope
存储“全局”变量是对$rootScope
工作原理的根本误解。虽然这有时会起作用,但这不是$rootScope的目的。我不明白您的建议。$locationChangeStart事件在承诺解决之前就已经完成了。您必须调用event.preventDefault(),然后在承诺得到解决后重定向自己