2014-11-06 58 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

相关问题