angularjs - $ locationChangeStart - rootScope上设置的数据在我的控制器中不可用

时间:2016-01-17 14:00:33

标签: angularjs angular-routing

我有一个应用程序,如果用户没有登录,某些路由会被限制。这是我的运行功能:

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。我认为这是因为操作的异步性质。使它运作的最佳方法是什么?

感谢。

0 个答案:

没有答案