2014-01-28 86 views
4

我有一個route其中有resolve服務器端資源。該資源要求認證。所以我展示了一個可取消的登錄表單彈出窗口。在取消路線/解決得到rejected$routeChangeError正確的火災。

問題是,我現在有地址欄中的失敗的位置/ url和一個不必要的歷史記錄。

如何在沒有重新加載的情況下將當前位置url替換爲最後一個?在路由更改失敗後,如何刪除當前的歷史記錄?

編輯: 我使用angular-http-auth。 這裏是我的路由:

/home>/item(已解決需要身份驗證的資源,在登錄窗體彈出沒有登錄時打開它取消)

當我取消認證$ routeChangeError得到解僱了,我仍然在/home 頁面由於/item從未呈現。現在地址欄顯示一個錯誤的網址:/item

回答

2

您只需要將它們發送回曆史中的一個步驟即可。不要擔心歷史記錄在那裏,當他們瀏覽到接下來的事情就會被改寫:

app.run(function($rootScope, $window) { 
    $rootScope.$on('$routeChangeError', function() { 
     $window.history.back(); 
    }); 
}); 

And here's a demo Plunk

+0

謝謝,但重新加載頁面我已經/仍然seeing.I使用angular-http-auth並在路由上的資源(具有解析)需要身份驗證時打開登錄彈出窗口。當我取消該登錄彈出我看到正確的頁面,但錯誤的位置。使用$ location.replace(),我可以擺脫下一次更改路由時無用的歷史記錄。但那不是解決方案。我必須更改$ routeChangeError上的$位置而不重新加載相同的頁面。 – tagomago

+0

然後你需要提供更多的代碼。我以爲我知道你需要做什麼,但現在我不知道你在做什麼。另外,我建議使用「angular-http-auth」或您正在使用的任何標籤來標記您的問題,並且可能會向模塊的作者發送鏈接。 –

+0

我很遺憾不被允許打開一個新的標籤「angular-http-auth」。 – tagomago