如何在AngularJS控制器中指定事件优先级?

如何在AngularJS控制器中指定事件优先级?,angularjs,Angularjs,我有一个Spring+AngularJS RestFul应用程序,具有用户识别功能 用户登录后,我将按以下方式存储此数据: $window.sessionStorage.user 因为我想在其他选项卡中使用此会话存储,所以我在主控制器中实现了此处提出的解决方案: 此外,在这个控制器中,我会收听$stateChangeStart事件,以检查用户是否登录。如果用户没有登录,我会将其重定向到相应的登录页面 当我在资源管理器中打开一个新选项卡时,我的问题就出现了。正如您在下面的代码中所看到的,我从旧选

我有一个Spring+AngularJS RestFul应用程序,具有用户识别功能

用户登录后,我将按以下方式存储此数据:

$window.sessionStorage.user
因为我想在其他选项卡中使用此
会话存储
,所以我在主控制器中实现了此处提出的解决方案:

此外,在这个控制器中,我会收听
$stateChangeStart
事件,以检查用户是否登录。如果用户没有登录,我会将其重定向到相应的登录页面

当我在资源管理器中打开一个新选项卡时,我的问题就出现了。正如您在下面的代码中所看到的,我从旧选项卡到新选项卡获得
$window.sessionStorage.user
变量,如下所示:

else if(event.key='sessionStorage'&&&!$window.sessionStorage.length){

//另一个选项卡发送数据很难保证控制器在其他模块之前运行

如果要在执行其他检查之前执行此检查,则需要在
运行模块上执行该检查

angular
.module('myApp')
.run(runBlock)
.run(['mySessionChecker', '$rootScope', function (mySessionChecker, $rootScope ) {

  $rootScope.$on("$locationChangeStart", function () {
      //Service that checks if the user is logged or not
      mySessionChecker.checkSession().then( function (auth) {
       //Auth tells you if the user is logged in or not
       console.log('User is '+auth);
       doSomething();
      })
  });

}]);

function runBlock($log) {
    $log.log('Angular's running');
}
运行模块
将在
应用模块
之后立即引导

angular
.module('myApp')
.run(runBlock)
.run(['mySessionChecker', '$rootScope', function (mySessionChecker, $rootScope ) {

  $rootScope.$on("$locationChangeStart", function () {
      //Service that checks if the user is logged or not
      mySessionChecker.checkSession().then( function (auth) {
       //Auth tells you if the user is logged in or not
       console.log('User is '+auth);
       doSomething();
      })
  });

}]);

function runBlock($log) {
    $log.log('Angular's running');
}
然后,例如,您可以使用
$rootScope
或使用该信息发出事件,并对其执行操作

我将创建一个
父控制器
,它截取
事件
,并将控制器扩展到需要执行检查的位置,以了解用户是否已登录

看一看


希望我能帮上忙。

很难保证您的控制器在其他模块之前运行

如果要在执行其他检查之前执行此检查,则需要在
运行模块上执行该检查

angular
.module('myApp')
.run(runBlock)
.run(['mySessionChecker', '$rootScope', function (mySessionChecker, $rootScope ) {

  $rootScope.$on("$locationChangeStart", function () {
      //Service that checks if the user is logged or not
      mySessionChecker.checkSession().then( function (auth) {
       //Auth tells you if the user is logged in or not
       console.log('User is '+auth);
       doSomething();
      })
  });

}]);

function runBlock($log) {
    $log.log('Angular's running');
}
运行模块
将在
应用模块
之后立即引导

angular
.module('myApp')
.run(runBlock)
.run(['mySessionChecker', '$rootScope', function (mySessionChecker, $rootScope ) {

  $rootScope.$on("$locationChangeStart", function () {
      //Service that checks if the user is logged or not
      mySessionChecker.checkSession().then( function (auth) {
       //Auth tells you if the user is logged in or not
       console.log('User is '+auth);
       doSomething();
      })
  });

}]);

function runBlock($log) {
    $log.log('Angular's running');
}
然后,例如,您可以使用
$rootScope
或使用该信息发出事件,并对其执行操作

我将创建一个
父控制器
,它截取
事件
,并将控制器扩展到需要执行检查的位置,以了解用户是否已登录

看一看


希望我能帮上忙。

那么这个登录根本没有通过Spring?请查看我的更新并提供更多详细信息。谢谢。那么这个登录根本没有通过Spring?请查看我的更新并提供更多详细信息。谢谢。谢谢你的回复。请查看我的更新,因为我没有完全得到建议的解决方案。我阅读了更新,但我不同意在上,您无法正确理解问题所在。如果您只是想更早地执行这些控件,则应在
运行模块中执行这些控件。您可能无法在
状态更改开始之前执行代码段,因为您在控制器中执行这些控件,而该控制器是在
运行.config之后启动和执行的。我理解您的观点,但我不知道如何在我的案例中实现这一点。在上面的代码片段中,您已将用户的检查放在运行块中,但我无法将我的检查放在运行块中,因为我依赖于另一个事件(从另一个选项卡获取
会话存储的事件)为了进行此验证,我将从AngularJS开始,因此您能否详细介绍一下如何在
$rootScope.$on(“$locationChangeStart”)之前从新的开始选项卡传输数据
事件?好的,如果你需要基于事件进行检查,那么它是完全不同的。如果你每次更改/重新加载状态时都需要进行检查,那么我的回答很有用。啊,你的意思是当你打开一个新选项卡时,它不会保留
$localStorage
的内容吗?我使用
$cookies
修复了这种问题。我首先检查了它ck
$localStorage
然后,如果它是空的,我会检查
$cookies
。看看
Angular JWT
。谢谢你的回复。请检查我的更新,因为我没有完全得到建议的解决方案。我阅读了更新,但我不知道你的问题是什么。如果你只是想早点做这些控制,你应该在
run模块中执行它们
。您可能无法在
stateChangeStart
之前执行代码段,因为您在控制器中执行这些控件,而控制器是在
run.config
之后启动和执行的。我理解您的观点,但我不知道如何在我的情况下实现这一点。在您上面的代码段中,y您已将用户的检查放入运行块中,但我无法将我的检查放入其中,因为我依赖于另一个事件(从另一个选项卡获取
会话存储的事件)为了进行此验证,我将从AngularJS开始,因此您能否详细介绍一下如何在
$rootScope.$on(“$locationChangeStart”)之前从新的开始选项卡传输数据
事件?好的,如果你需要基于事件进行检查,那么它是完全不同的。如果你每次更改/重新加载状态时都需要进行检查,那么我的回答很有用。啊,你的意思是当你打开一个新选项卡时,它不会保留
$localStorage
的内容吗?我使用
$cookies
修复了这种问题。我首先检查了它ck
$localStorage
然后,如果它是空的,我会检查
$cookies
。看看
Angular JWT