2014-11-06 85 views
0

我們在我們的環境中有兩個不同的應用程序,一個用於處理登錄和主要門戶。當任何人嘗試訪問一個門戶網站並且其未登錄時,「其他」功能將保存此網址並重定向到登錄。當重定向到登錄時在角度路線中的迴路問題

$urlRouterProvider.otherwise(function($injector, $location){ 

    console.log($location.absUrl()); 

    //save attempted url 


    //redirect to login, 
    var loginUrl=$location.absUrl() + '#/login'; 

    var $window=$injector.get('$window'); 
    console.log(loginUrl); 
    $window.location.href=loginUrl; 
}); 

在Firefox這項工作很好,但在Chrome中,「登錄」狀態從來沒有解決,所以每一次回落到默認的功能,從而導致一個循環。

你可以看到http://plnkr.co/edit/l51Wqn0EB1ySDjbScSvY

這個問題誰能幫我解決的辦法?

編輯:我需要執行重定向與$ window.location.href,因爲這個應用程序有時得到加載/門戶和需要重定向到/#/登錄。

回答

0

當應用程序最初加載時,它將在去URL中的路徑(在您的案例中,#/login)之前打到""路徑。每次執行$window.location時,都會通知應用程序重新加載。在每次重新加載時,它會查找映射到""的狀態,並且無法找到它,因此它會觸發另外的...因此循環。

您可以處理空路線「時,」

.when('', '/login') 

您也可以將其默認爲您的主頁,假設你有邏輯您的主頁踢用戶返回到登錄,如果他們沒有登錄。

+0

謝謝你!我知道我不應該使用$ window.location進行重定向,而你的其他答案就是這個問題的良好做法,但對於我的特殊情況,這個答案是有效的。 – 2014-11-07 13:21:06

+0

是的,我在那裏留下了我的其他答案以獲得最佳實踐。 – TheSharpieOne 2014-11-07 13:23:13

0

不太清楚是否有必要使用$window.location,但如果你只是想存儲當前的位置,然後直接向您的國家之一,你可以注入$state和使用$state.go(...)

$urlRouterProvider.otherwise(function($injector, $location){ 

    console.log($location.absUrl()); 

    //save attempted url 


    //redirect to login, 
    var $state=$injector.get('$state'); 
    $state.go('login'); 
}); 

更新plunker:http://plnkr.co/edit/aMsjxQ9WQIXqrQ7e9MJq?p=preview

+0

我忘了註釋掉我們需要$ window.location.href重定向。 – 2014-11-06 20:14:46