【问题标题】:Angular not reading $rootScope variable during $locationChangeAngular 在 $locationChange 期间未读取 $rootScope 变量
【发布时间】:2014-08-17 17:19:32
【问题描述】:

我使用$rootScope 设置了一个登录变量,所以我的代码知道用户是否登录:

$rootScope.login = true;

现在,如果用户未登录,我想将任何位置更改重定向到登录页面。所以我尝试了这个:

$scope.$on('$locationChangeStart', function(){   
  if (!$rootScope.login) $location.path('/');
});

但在这种情况下,$rootScope.login 返回未定义。如果我尝试像{{login}} 那样将变量打印到页面上,它确实显示为真,所以我知道正在设置变量。我在更改位置时做错了什么?

【问题讨论】:

  • 您如何将登录更新为 true,在异步调用期间是否会发生任何方式。你能显示更多相关的代码吗?特别是您如何设置登录属性?
  • @PSL 啊,是的,我认为你是对的,我试图在异步调用首先设置它之前读取变量!感谢您指出这一点。

标签: javascript angularjs routes


【解决方案1】:

在 Angular 中设置用户/登录的首选方法是从您的路线中设置访问权限:

$routeProvider.when('/login', { 
    templateUrl: 'partials/main.html',
    controller: 'loginCtrl',
    access: {
        isloggedIn: true
    }
});

您可以像以前一样设置值$scope.login

$root.$on('$routeChangeStart', function(event, currRoute, prevRoute){
    if ( !prevRoute.access.isLoggedIn && !$scope.login )  {
         console.log('user is not logged in');
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2015-03-21
    • 2019-08-12
    相关资源
    最近更新 更多