AngularJs Run块$ stateChangeStart未被触发

时间:2017-12-19 16:42:52

标签: angularjs angular-ui-router

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

      });
   });    
})();

2 个答案:

答案 0 :(得分:3)

$ stateChange *事件已弃用

{1}}事件在1.0中已弃用。它们被$stateChange*转换挂钩替换。

但是,可以通过包含$transitions.on*并取决于stateEvents.js角度模块来重新启用它们以实现向后兼容性。

'ui.router.state.events'

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

答案 1 :(得分:2)

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

 angular
    .module('app',[])

也将其更改为$ location作为运行依赖项,

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