2014-10-06 76 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 2014-10-06 07:48:57

+0

當if條件成立時,我不想讓狀態改變。 – Learner 2014-10-06 08:17:05

+0

哈哈謝謝,但是,誰引發了這個事件?也許你有另一個項目重新觸發stateChange? 你確定if語句是真的嗎? – originof 2014-10-06 10:08:31

回答

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 2014-10-07 10:07:41

+0

我會說是的。國家總是在等待決心發生..很好,如果這有助於無論如何。享受UI路由器 – 2014-10-07 10:13:43