当重定向到登录时在角度路线中的回路问题
我们在我们的环境中有两个不同的应用程序,一个用于处理登录和主要门户。当任何人尝试访问一个门户网站并且其未登录时,“其他”功能将保存此网址并重定向到登录。当重定向到登录时在角度路线中的回路问题
$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,因为这个应用程序有时得到加载/门户和需要重定向到/#/登录。
当应用程序最初加载时,它将在去URL中的路径(在您的案例中,#/login
)之前打到""
路径。每次执行$window.location
时,都会通知应用程序重新加载。在每次重新加载时,它会查找映射到""
的状态,并且无法找到它,因此它会触发另外的...因此循环。
您可以处理空路线“时,”
.when('', '/login')
您也可以将其默认为您的主页,假设你有逻辑您的主页踢用户返回到登录,如果他们没有登录。
不太清楚是否有必要使用$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
我忘了注释掉我们需要$ window.location.href重定向。 – 2014-11-06 20:14:46
谢谢你!我知道我不应该使用$ window.location进行重定向,而你的其他答案就是这个问题的良好做法,但对于我的特殊情况,这个答案是有效的。 – 2014-11-07 13:21:06
是的,我在那里留下了我的其他答案以获得最佳实践。 – TheSharpieOne 2014-11-07 13:23:13