2014-10-06 3 views
3
$rootScope.$on('$stateChangeStart', function(event, toState , toParams 
                , fromState, fromParams) { 
    if(fromState.name=='home' && toState.name == 'search'){ 
     event.preventDefault(); 
    } 
}); 

Я пытаюсь предотвратить переход государства из происходящего.statechangestart предотвращение от навигации

event.preventDefault() 

не делает это. Я хочу, чтобы состояние оставалось в текущем.

+0

должна работать, то, что вы пытаетесь делать ? – originof

+0

Я не хочу, чтобы состояние менялось, когда условие if истинно. – Learner

+0

lol спасибо, но кто запускает мероприятие? Может быть, у вас есть еще один элемент для повторного запуска stateChange? Вы уверены, что утверждение if верно? – originof

ответ

2

Что вам нужно, должно быть выполнено из коробки. Я создал a plunker, показывая ваше требование в действии. Есть эти три образца состояния

$stateProvider 
    .state('home', { 
     url: '/home', 
     template: '<div>home</div>', 
     }) 
    .state('search', { 
     url: '/search', 
     template: '<div>search</div>', 
     }) 
    .state('index', { 
     url: '/index', 
     template: '<div>index</div>', 
     }) 

И это (такой же, как и в вопросе) состояние Отключает навигация из дома ПОИСК:

$rootScope.$on('$stateChangeStart', 
    function(event, toState , toParams 
        , fromState, fromParams) 
    { 
     var isFromHome = fromState.name =='home' ; 
     var isToSearch = toState.name == 'search'; 
     if(isFromHome && isToSearch) 
     { 
     event.preventDefault(); 
     } 
    }); 

Проверить это here

+0

спасибо Radim. Я поставил оператор if в неправильном месте. будет переход государства ждать выполнения обещания, а затем перейти к этому состоянию? – Learner

+0

Я бы сказал, да. Государство всегда ждет решения. Отлично, если это так или иначе помогло. Наслаждайтесь интерфейсом UI-Router –

Смежные вопросы