UI-router $ stateChangeStart根本不工作

时间:2016-02-03 15:57:56

标签: angularjs angular-ui-router

这是我的app.js

var $stateProviderRef = null;
var $urlRouterProviderRef = null;

var acadb = angular.module('acadb', [
'ngRoute',
'ui.router',
'ngAnimate',
'ui.bootstrap',

'acadb.controllers',
'acadb.services',
'acadb.filters',
'acadb.directives',

'ngResource',

'angularMoment',
'angularFileUpload',
'ui.materialize',
'angular-toArrayFilter',
'ngSanitize',
'metatags',
])


.run(['$rootScope', '$state', '$stateParams','$http', function($rootScope,     $state, $stateParams,$http) {
    $rootScope.$state = $state;
    $rootScope.$stateParams = $stateParams;
}])

    .config(['$locationProvider', '$stateProvider', '$urlRouterProvider',       '$httpProvider',
    function($locationProvider, $stateProvider, $urlRouterProvider,      $httpProvider) {

  // XSRF token naming
  $httpProvider.defaults.xsrfHeaderName = 'x-dt-csrf-header';
  $httpProvider.defaults.xsrfCookieName = 'X-CSRF-TOKEN';

  //$httpProvider.interceptors.push('httpInterceptor');
  $urlRouterProvider.otherwise("/");



    $stateProvider



        .state('home', {
            url: "/",
            templateUrl: '/partials/tpl/welcome.html',
        })
        .state('jobseeker', {
            url: "/jobseeker",
            templateUrl: '/partials/dashboard.php',

        })
        .state('register', {
            url: "/register",
            templateUrl: '/partials/auth/register.blade.php',
        })
        .state('login', {
            url: "/login",
            templateUrl: '/partials/tpl/login.html',
        })

      $locationProvider.html5Mode({
    enabled: false
  });
  $stateProviderRef = $stateProvider;
  $urlRouterProviderRef = $urlRouterProvider;

}])

 .run(function($rootScope, $location, AuthenticationService, FlashService, MetaTags,$state ) {
        console.log('ds');
        $rootScope.$on('$stateChangeStart', function(event, next, current) {
            event.preventDefault();
            console.log('sd');
            //if(!AuthenticationService.isLoggedIn()) {
            //    console.log(current);
            //    console.log(next);
            //
            //
            //
            //    event.preventDefault();
            //    $state.go('login');
            //    FlashService.show("Please log in to continue.");
            //}
            //

        });
    }
)

我真正想要的只是在状态变化时控制日志字符串。 为什么第二个控制台不会触发stateChangeStart?

这令人沮丧。 我在另一个工作正常的

的应用程序中具有完全相同的逻辑

2 个答案:

答案 0 :(得分:5)

要启用这些状态事件,请在项目中包含stateEvents.js文件,例如

<script src="stateEvents.js"></script>

并确保依赖于ui.router.state.events角度模块,例如,

angular.module("myApplication", ['ui.router', 'ui.router.state.events']

https://ui-router.github.io/ng1/docs/latest/modules/ng1_state_events.html

答案 1 :(得分:0)

似乎ui.router和ngRoute可能无法一起工作。摆脱ngRoute包和所有依赖行为,然后重试。