Angular Состояние JS-UI-маршрутизатора Состояние событияChangeSuccess не срабатывает
Я использую UI Router в приложении angular. Я пытаюсь интегрировать события state change
, но они не стреляют в изменение состояния. Все остальное работает нормально, и в консоли нет ошибок. Я столкнулся с подобными вопросами, но ни одно из решений не помогло мне:
$rootScope. $on ( "$routeChangeSuccess" ) или $rootScope. $on ( "$stateChangeSuccess" ) не работает при использовании ui-router (AngularJS)
angular + ui-router: $stateChangeSuccess запускается в состоянии b, но не на a.b
Ниже приведен мой код angular:
(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'
})
});
}());
Слева нет подсказки. Я не уверен, что мне не хватает.
Ответы
Ответ 1
Если вы используете новый ui-router (v1.0.0), события $stateChange*
не будут работать. Вы должны использовать $transitions.on*
hooks с этого момента.
Вы можете прочитать здесь.
https://ui-router.github.io/docs/latest/modules/ng1_state_events.html
https://github.com/angular-ui/ui-router/issues/2720
Ответ 2
События StateChange устарели для ui.router >= 1.0
для нового ui.router
используйте следующий
StateChageSuccess
$transitions.onSuccess({}, function() {
console.log("statechange success");
});
StateChangeStart
$transitions.onStart({}, function(trans) {
console.log("statechange start");
});
Подробнее об этом руководство по миграции
Ответ 3
События $state устарели для angular версии > 1.0.0.
теперь для события изменения мы должны использовать $переходы
отсылайте $переходы отсюда