AngularJs Run块$ stateChangeStart未被触发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AngularJs Run块$ stateChangeStart未被触发相关的知识,希望对你有一定的参考价值。

当应用程序更改路由时,我的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');
        }

      });
   });    
})();
答案

$ 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

另一答案

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

 angular
    .module('app',[])

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

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

以上是关于AngularJs Run块$ stateChangeStart未被触发的主要内容,如果未能解决你的问题,请参考以下文章

angular run()运行块

angularjs中的run()方法使用

AngularJS 模块中的run方法

在 .run 在路由中从 Angularjs 中的 url 中删除 #

text angularjs config和run的区别

IFrame 中的 AngularJS run() 方法不会在 iframe 重新加载时重新运行