【问题标题】:AngularJs event $stateChangeStart not firingAngularJs 事件 $stateChangeStart 未触发
【发布时间】:2021-11-04 13:34:58
【问题描述】:

我正在尝试为用户实现基于路由的安全性,而 stateChangeStart 不会触发,这是我的代码:

app.run(['$rootScope', '$location', function($rootScope, $location) {
    $rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){
      console.log('$stateChangeStart to '+toState.to+'- fired when the transition begins. toState,toParams : \n',toState, toParams);
   });

}]);

因此,每当我更改路由并从一个链接/控制器跳转到另一个链接/控制器时,什么都不会发生,但是当我在各个控制器中添加控制台日志时,我确实会看到控制台日志语句。

我在这里做错了什么?我该如何调试这个,我不是很有经验的人

更新

我想我使用的是ngRoute 而不是ui-router

ngRoute 是否有等效的东西,我在根范围内获得状态更改。为了这个目的,迁移到 ui-router 似乎是一个很大的改变

【问题讨论】:

  • 澄清一下,你用的是ui-router还是ngRoute?
  • @charlietfl 是的,我使用ngRoute d'oh,有没有与ngRoute 等价的东西
  • 是的,$routeChange... ...但这也可以在文档中轻松查找
  • @charlietfl 是的,它可以,但如果您访问 docs.angularjs.org/api/ngRoute,例如在滚动内容的右侧,我无法导航到该信息。但是“轻松”是一个前瞻性问题,您显然知道自己的方法,我最近刚开始使用 angular,希望我能在某个时候达到您的水平。

标签: javascript angularjs


【解决方案1】:

是的,您有来自 $route 提供者的不同事件:$routeChangeStart、$routeChangeSuccess、$routeChangeError

$rootScope.$on('$routeChangeStart', function(event, next, current) {
    // TODO
});

文档:https://docs.angularjs.org/api/ngRoute/service/$route

【讨论】:

  • 引入很简单,因为它可以变成来自 cmets 的答案......至少用正确的句子使它成为一个完整的答案
猜你喜欢
  • 2014-09-23
  • 2018-06-02
  • 1970-01-01
  • 2016-04-25
  • 2013-08-25
  • 2018-04-30
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
相关资源
最近更新 更多