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(),然后在承诺得到解决后重定向自己