【问题标题】:AngularJs Run block $stateChangeStart not being firedAngularJs Run 块 $stateChangeStart 没有被触发
【发布时间】:2018-06-02 03:42:21
【问题描述】:

当应用程序更改路由时,我的 AngularJs 运行块不会执行处理程序函数,至少我是这么认为的。我尝试放置一个简单的控制台日志进行测试,但它没有记录任何内容。最终目标是成为一个路由拦截器,检查路由是否需要身份验证。

github 仓库链接https://github.com/guilinden/authenticatedCRUD

(function(){
    angular
    .module('app')
    .run(function ($rootScope, $location) {
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
        var requireLogin = toState.data.requireLogin;

        if(requireLogin){
            event.preventDefault();
            $location.path('/home');
        }

      });
   });    
})();

【问题讨论】:

  • 考虑修复:.module('app', [])
  • 任何控制台错误?
  • 问题应包含 stackoverflow.com/help/mcve ,其中 M 代表最小。 run 一定要执行,否则控制台会报错。
  • 请删除不再有效或不再需要的 cmets。

标签: angularjs angular-ui-router


【解决方案1】:

$stateChange* 事件已被弃用

$stateChange* 事件在 1.0 中已弃用。它们被 $transitions.on* 转换钩子替换。

但是,可以通过包含 stateEvents.js 并根据 'ui.router.state.events' 角度模块重新启用它们以实现向后兼容性。

<script src="stateEvents.js">
var myApp = angular.module('myApp', ['ui.router', 'ui.router.state.events']);

UI-router Issue #2720 - $stateChangeStart not being fired on v1.0

【讨论】:

  • 完美答案!谢谢
【解决方案2】:

您的控制台中应该有 app not defined 错误。您缺少空依赖项

 angular
    .module('app',[])

也改成,$location 作为依赖运行,

  .run(function ($rootScope,$location) {
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) {

【讨论】:

  • 模块在另一个文件中定义,这部分正在工作。回购地址为github.com/guilinden/authenticatedCRUD
  • 没有用。如果我在它记录的处理程序函数之前添加一个控制台日志,但在它内部没有。 $rootScope.$on 函数没有被执行
  • 应该,创建一个 plunker 来展示你的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多