0

是否可以在全局配置某些內容,以便每次輸入新路由時都會檢查前一個路由是以/ modal開頭還是不是不刷新控制器,只需從堆棧中刪除頂層模式?Angular-UI路由器,如果來自/模態路由,則不會刷新

我想我可以通過reloadOnSearch和使用搜索參數來實現這一點,但是之後我必須設置整個網站上的每條路線來設置reloadOnSearch,因爲網站上的任何路線都可能啓動模式,因此這是不可取的。

任何幫助真的不勝感激。

+1

我認爲這是合理的把你的狀態配置在這裏 –

+0

爲什麼你要通過路由器,如果你只是想關閉模式? – illiptic

+0

當我從/ state1到/ modal1然後到/ modal2時,我希望URL更改並且後退按鈕可以回到歷史記錄中的前一個狀態。但是,當你回到/ modal1時,它應該關閉第二個模態,然後當你回到/ state1時它應該關閉第一個模態。這一切都不應該重新載入已經在模態下愉快地坐着的state1。 – jonhobbs

回答

1

你試過這個嗎?

$rootScope.$on('$stateChangeStart', 
function(event, toState, toParams, fromState, fromParams){ 
    //codes 
}) 
+0

是的,這有助於我在狀態發生變化時運行代碼,但是如果用戶點擊後退按鈕,或者如果歷史記錄因爲向前移動並打開新狀態而更新,您將如何判斷?您將如何取消刷新新的狀態沒有取消URL更改? – jonhobbs

+0

停止刷新,做,'event.preventDefault = true' –

+0

好吧,我會嘗試。 – jonhobbs

0

簡單角路線,你可以這樣做:

yourApp.run(function($rootScope, $location){ 
    $rootScope.$on('$routeChangeStart', function(evt, next, current) { 
    // next: The next URL to which we are attempting to navigate 
    // current: The URL that we are on before the route change 

    if (current == 'modal1'){ 
     evt.preventDefault(); 
    } 
    }); 
}) 

爲了調整這angular ui,只是改變$routeChangeStart到相關的一個($stateChangeStart,我認爲)。

+0

這很接近,但問題是,如果用戶從模態1移動到新狀態(但還沒有倒退),則默認操作將被阻止。這隻有在用戶退後或模式被解僱時才需要工作。 – jonhobbs