2016-05-11 15 views
11

Używam UI Router w mojej aplikacji kątowej. Próbuję zintegrować zdarzenia state change, ale one nie uruchamiają zmiany stanu. Wszystko inne działa dobrze i nie ma błędów w konsoli. Natknąłem się po podobnych pytań, ale żaden z roztworem pracował dla mnie:Angular JS - UI Router Zdarzenie stateChangeSuccess nie wyzwala

$rootScope.$on("$routeChangeSuccess) or $rootScope.$on("$stateChangeSuccess) does not work when using ui-router(AngularJS)

angular + ui-router: $stateChangeSuccess triggered on state b but not on a.b

Poniżej mój kod kątowa:

(function() { 

    angular.module("bootdemo", [ 
     "ngResource",  
     "ui.router", 
     "bootdemo.core", 
     "bootdemo.index"   
    ]) 
    .run(function ($rootScope, $location, $state, $stateParams) { 

     $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){ 
      alert("root change success"); 
     }) 

     $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, options){ 
      alert("root change start"); 
     }) 

     $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error){ 
      alert("root change error"); 
     }) 
    }) 
    .config(function($stateProvider, $urlRouterProvider){ 
     $urlRouterProvider.otherwise('/'); 
     $stateProvider 
      .state('index', { 
       url: "/", 
       templateUrl: '/index/templates/welcome.html', 
       controller: 'IndexController as vm' 
      }) 
      .state('login', { 
       url: "/login", 
       templateUrl: '/index/templates/login.html', 
       controller: 'LoginController as ctrl' 
      }) 
      .state('home', { 
       url: "/home", 
       templateUrl: '/index/templates/home.html', 
       controller: 'HomeController as ctrl'  
     }) 
    }); 



}()); 

lewo bez pojęcia. Nie jestem pewien, czego mi brakuje.

+0

miałem problem z „alfa” wersji, jeśli ciebie użyj tego, obniżenie wersji – ThomasP1988

+0

Bang On! Miałem ten sam problem. Dzięki @ ThomasP1988 – hemu

Odpowiedz

11

wydarzenia stateChange została zaniechana na ui.router >= 1.0

nowego ui.router użyć następującego

StateChageSuccess

$transitions.onSuccess({}, function() { 
    console.log("statechange success"); 
}); 

StateChangeStart

$transitions.onStart({}, function(trans) { 
console.log("statechange start"); 
}); 

Sprawdź to migration guide więcej informacji

0

$ stan zdarzenia są przestarzałe dla wersji kątowej> 1.0.0. teraz naprzód do zmiany przypadku musimy użyć $ przejścia

odnoszą $transitions stąd

0

Zrobiłem migrację ręcznie w mojej aplikacji, jak to było dość proste. Ja tylko dodać następujące w bloku przebiegu aplikacji:

$transitions.onSuccess({}, function(transition) { 
    console.log('$transitions.onSuccess: ', arguments); 
    var toState = transition.$to(); 
    var toParams = transition.params(); 
    var fromState = transition.$from(); 
    var fromParams = transition.params('from'); 
    var options = transition._options; 
    console.log('new args: ', toState, toParams, fromState, fromParams, options); 
    $rootScope.$broadcast('$stateChangeSuccess', toState, toParams, fromState, fromParams, options); 
}); 

$transitions.onStart({}, function(transition) { 
    console.log('$transitions.onStart: ', arguments); 
    var toState = transition.$to(); 
    var toParams = transition.params(); 
    var fromState = transition.$from(); 
    var fromParams = transition.params('from'); 
    var options = transition._options; 
    console.log('new args: ', toState, toParams, fromState, fromParams, options); 
    if ($rootScope.$broadcast('$stateChangeStart', toState, toParams, fromState, fromParams, options).defaultPrevented) { 
     transition.abort(); 
    } 
}); 

EDIT: Dodałam też przypadki, dla $ stateChangeError:

$transitions.onError({}, function(transition) { 
    var toState = transition.$to(); 
    var toParams = transition.params(); 
    var fromState = transition.$from(); 
    var fromParams = transition.params('from'); 
    var options = transition._options; 
    $rootScope.$broadcast('$stateChangeError', toState, toParams, fromState, fromParams, options); 
}); 

$state.onInvalid(function(to, from, injector) { 
    var toState = { 
     name: to._identifier, 
    }; 
    var toParams = to._params; 
    var fromState = from._definition; 
    var fromParams = from._params; 
    var options = from._options; 
    $rootScope.$broadcast('$stateChangeError', to, toParams, fromState, fromParams, options); 
}); 
Powiązane problemy