Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在$locationChange期间未读取$rootScope变量_Javascript_Angularjs_Routes - Fatal编程技术网

Javascript 在$locationChange期间未读取$rootScope变量

Javascript 在$locationChange期间未读取$rootScope变量,javascript,angularjs,routes,Javascript,Angularjs,Routes,我已经使用$rootScope设置了一个登录变量,以便我的代码知道用户是否登录: $rootScope.login = true; 现在,如果用户未登录,我想将任何位置更改重定向到登录页面。所以我试了一下: $scope.$on('$locationChangeStart', function(){ if (!$rootScope.login) $location.path('/'); }); 但在本例中,$rootScope.login返回未定义的。如果我尝试将变量打印到页面上,

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

$rootScope.login = true;
现在,如果用户未登录,我想将任何位置更改重定向到登录页面。所以我试了一下:

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

但在本例中,
$rootScope.login
返回未定义的。如果我尝试将变量打印到页面上,比如so
{{login}
它确实显示为true,因此我知道变量正在设置。我在位置更改中做错了什么?

在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');
    }

如何将login更新为true,是因为在异步调用期间会发生任何情况。你能展示更多相关的代码吗。特别是您如何设置登录属性?@PSL啊,是的,我认为您是对的,我正在尝试在异步调用设置变量之前读取变量!谢谢你指出这一点。