2014-10-02 22 views
2

我想要在state1和state2之間建立一個簡單的「您確定要保留取消」模式嗎?因此,我使用ui-router示例(如何:在state1中使用onExit打開對話框/模式處於特定狀態)。模態出現,但狀態改變爲狀態2發生在模態關閉之前。angular-ui ui-router modal state.onExit ...更改爲新狀態發生得太快

如何停留在狀態1,有模態,按下確定或取消,狀態2的改變發生在關閉模態之後?提前

THX任何提示

回答

0

onExit是錯誤的地方這樣做。它在州已經開始退出時被調用。

你可以實現你的語氣像這個:

顯示模式,當用戶執行退出動作(如單擊按鈕),但不叫狀態變化呢。

如果用戶在點擊模式確定按鈕然後調用如果$state.go('state2')

否則用戶點擊取消,只是隱藏模式。用戶將保持在狀態1!

+0

但是,如果用戶通過其他方式離開狀態,好比說有一個主導航欄和用戶的變化通過使用導航欄的另一種狀態? (如果有一個確認模式,比如'你有未保存的更改,你確定要離開這個頁面',這會很好嗎?')有沒有一種「全部捕獲」的方式? – 2015-02-15 09:12:29

+0

@DecadeMoon在這種情況下,您可以使用State Change Listener並使用event.preventDefault()來停止狀態更改:https://github.com/angular-ui/ui-router/wiki#state-change-events – 2015-02-16 10:32:04

1

你可以用「$ stateChangeStart」甚至在根範圍內是這樣的:

$rootScope.$on('$stateChangeStart', function(event, toState, toParams) { 
    event.preventDefault(); 
    showModal().then(function() { 
     $state.go(toState, toParams); 
    }); 
}); 
+0

也使用很多聽衆很糟糕。這應該只作爲最後的手段,但每次我閱讀角度相關的職位,人們總是說只使用scope.on()。每次發生事件時,所有聽衆都會運行,因此其中有100個意味着您有相當於100個if()條件。你會驚訝的是,這個數字有多快達到100,特別是當你有第三方庫。 – Void 2016-06-23 15:05:54