2017-10-09 35 views
1

我會盡力解釋我的問題。我有一個網頁A,當我在A中完成一個過程時,我可以進入頁面B.當我在頁面B上完成一個過程時,我可以轉到頁面C,因此我可以有n個頁面。到第n頁。 我希望用戶永遠不能訪問頁面C,如果他沒有先去頁面A或頁面B.換句話說,我想強制用戶使用頁面的內部導航。也就是說用戶不能在瀏覽器中寫入url,或重新加載頁面,如果發生這種情況,應該將其重定向到特定頁面。阻止從網址導航到另一頁

從角度與此設法把一些條件之前去任何特定的控制器。

//similar to $statechange 
angularRoutingApp.run(function ($rootScope, $state, $location, $transitions) 
{ 
$transitions.onStart({}, trans = > { 
    $state.go('anystate', trans.targetState()) 
}); 
} 

從javascript與我知道什麼時候重新加載頁面。

if ($window.performance.navigation.type == 1) { 
console.info("This page is reloaded"); 
} else { 
console.info("This page is not reloaded"); 
} 

但在這兩種情況下,我有一個問題:如果 我在,我還沒有從瀏覽器的網址我寫B的URL的處理結束,並立即,它打破了我想要的狀態。但如果我在B並再次充電,現在檢測到頁面已被重新加載。

我希望能讓自己明白。

我能做什麼?

+0

你應該改爲從第3頁根據你有什麼數據 - 如果你沒有來自頁面1 + 2的數據(用戶填寫,如果沒有輸入,然後變量當你從ui導航到下一頁時,由你設置),然後你重定向 –

回答

0

Angular設計爲單頁面應用程序,刷新時不喜歡。爲此,您需要存儲您的信息(在會話中,cookie等),然後在您知道確切位置後執行您的操作。

要處理對不同頁面的訪問,建議在配置中使用解析器。你會檢查你存儲的數據並相應地重定向。路線更改之前解決與承諾的交易,所以它運行之前angularRoutingApp.run()

此外,$stateProvider允許你嵌套自定義控制器,它可以簡化您做出決議頁面。更多關於如何inject the results from the parent resolve into the child resolve function