我正在处理的应用程序包含各种状态(使用ui-router),其中某些州要求您登录,其他州则公开。
我创建了一个方法,可以有效地检查用户是否已登录,我当前遇到的问题实际上是在必要时重定向到我们的登录页面。应该注意的是,登录页面当前不在AngularJS应用程序中。
app.run(function ($rootScope, $location, $window) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
if (toState.data.loginReq && !$rootScope.me.loggedIn) {
var landingUrl = $window.location.host + "/login";
console.log(landingUrl);
$window.open(landingUrl, "_self");
}
});
});
console.log正确显示了预期的网址。在那之后,我几乎尝试了从$ window.open到window.location.href的所有内容,无论我尝试过什么都没有重定向。
编辑(已解决):
发现了这个问题。
var landingUrl = $window.location.host + "/login";
$window.open(landingUrl, "_self");
变量landingUrl设置为“domain.com/login”,无法使用 $ window.location.href(这是我尝试过的事情之一)。但是在将代码更改为
之后var landingUrl = "http://" + $window.location.host + "/login";
$window.location.href = landingUrl;
它现在有效。
答案 0 :(得分:74)
我相信这样做的方法是$location.url('/RouteTo/Login');
编辑清晰度
说我的登录视图的路线是/Login
,我会说$location.url('/Login')
导航到该路线。
对于Angular应用程序之外的位置(即未定义路径),将提供普通的旧JavaScript:
window.location = "http://www.my-domain.com/login"
答案 1 :(得分:34)
似乎对于整页重新加载$window.location.href
是首选方式。
更改浏览器URL时,不会导致整页重新加载。要在更改URL后重新加载页面,请使用较低级别的API $ window.location.href。
答案 2 :(得分:19)
它可能对你有所帮助! demo
AngularJs代码示例
<div ng-app="urlApp">
<div ng-controller="urlCtrl">
Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
</div>
</div>
HTML代码示例
{{1}}
答案 3 :(得分:4)
不确定从哪个版本开始,但我使用1.3.14而你可以使用:
window.location.href = '/employee/1';
无需在控制器中注入$location
或$window
,也无需获取当前主机地址。
答案 4 :(得分:-11)
你必须把:
&lt; html ng-app =&#34; urlApp&#34; NG-控制器=&#34; urlCtrl&#34;&GT;
这样角度函数就可以访问&#34; window&#34;对象