2016-02-17 2 views
2

Я пытаюсь предотвратить навигацию и показать всплывающее окно в контроллере.Предотвращение навигации в приложении Ionic

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { 
    if(someConditionMet) { 
    event.preventDefault(); 
    showPopup(); 
    } 
} 

Это работает как шарм, кроме навигации на вкладке. Он не может предотвратить правильную навигацию и переходить на вкладку, а затем отображать всплывающее окно. Другая проблема возникает из-за того, что всплывающее окно изменения области не загружается должным образом и вызывает исключение. Я вижу только пустое всплывающее окно без возможности выйти после этого.

Edit - Plunker демо http://plnkr.co/edit/r8MxO6tDZfTlHPXrVJlM?p=preview

С боковом меню нажмите О предотвращает нормально. Затем нажмите вкладку настроек. Он пытается перейти на вкладку настроек и отображает всплывающее окно. Также нельзя успешно загружать вкладку настроек.

+0

Просьба привести полный и поддающийся проверке пример, воспроизводящий вашу проблему. Код, который вы предоставили, является слишком общим. – beaver

+0

Я добавил демонстрацию plunker. – Xelom

ответ

2

Я редактировал "настройка" состояние (название "tabs.about", вложенный в "закладку"):

.state('tabs.about', { 
    url: '/about', 
    controller: 'AboutCtrl', 
    templateUrl: 'about.html' 
}); 

Затем я создал новый контроллер ("mainCtrl"), прикрепленный к <body> и переехал сюда обработчик $stateChangeStart события, поэтому он может слушать события независимо от текущего состояния (ранее он находился в главном контроллере):

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { 
    var txt = '$stateChangeStart from: '+fromState.name+" to "+toState.name; 
    console.log(txt); 
    $rootScope.log = txt; 
    }) 

Вот plunker обновления:

http://plnkr.co/edit/xcTMzPJdTVgVxV5jgpho