Javascript 在AngularJS中使用$window或$location重定向
我正在使用的应用程序包含各种状态(使用ui路由器),其中一些状态要求您登录,其他状态是公开可用的 我创建了一个方法,可以有效地检查用户是否登录,我目前遇到的问题实际上是在必要时重定向到我们的登录页面。需要注意的是,登录页面当前不在AngularJS应用程序中Javascript 在AngularJS中使用$window或$location重定向,javascript,angularjs,redirect,angular-ui-router,Javascript,Angularjs,Redirect,Angular Ui Router,我正在使用的应用程序包含各种状态(使用ui路由器),其中一些状态要求您登录,其他状态是公开可用的 我创建了一个方法,可以有效地检查用户是否登录,我目前遇到的问题实际上是在必要时重定向到我们的登录页面。需要注意的是,登录页面当前不在AngularJS应用程序中 app.run(function ($rootScope, $location, $window) { $rootScope.$on('$stateChangeStart', function (event, toState,
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正确显示了预期的url。在那之后的一行中,我几乎尝试了从$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;
它现在可以工作了。我相信这样做的方法是
$location.url('/RouteTo/Login')代码>
为清晰起见进行编辑
假设我的登录视图的路径是/login
,我会使用$location.url('/login')
导航到该路径
对于Angular应用程序之外的位置(即未定义路线),纯旧JavaScript将提供:
window.location = "http://www.my-domain.com/login"
它可能会帮助你
AngularJs代码示例
var app = angular.module('urlApp', []);
app.controller('urlCtrl', function ($scope, $log, $window) {
$scope.ClickMeToRedirect = function () {
var url = "http://" + $window.location.host + "/Account/Login";
$log.log(url);
$window.location.href = url;
};
});
<div ng-app="urlApp">
<div ng-controller="urlCtrl">
Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
</div>
</div>
HTML代码示例
var app = angular.module('urlApp', []);
app.controller('urlCtrl', function ($scope, $log, $window) {
$scope.ClickMeToRedirect = function () {
var url = "http://" + $window.location.host + "/Account/Login";
$log.log(url);
$window.location.href = url;
};
});
<div ng-app="urlApp">
<div ng-controller="urlCtrl">
Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
</div>
</div>
重定向到
对于整个页面重新加载,$window.location.href
似乎是首选方法
更改浏览器URL时,不会导致重新加载整个页面。要在更改URL后重新加载页面,请使用较低级别的API$window.location.href
您必须:
通过这种方式,角度函数可以访问“窗口”对象不确定从哪个版本开始,但我使用1.3.14,您可以使用:
window.location.href = '/employee/1';
无需在控制器中注入$location
或$window
,也无需获取当前主机地址。可能还应添加数据上的服务器端身份验证,因此上述身份验证不是唯一的身份验证,更方便的是重定向到登录页面,而不是显示一个空的页面。您需要使用<代码>位置$>代码>对象,使用<代码> $Value.List=…./Cord>,而您可以考虑将其全部包括一个包含您的身份验证的angurjs。但由于我们目前正在向AngularJS过渡,注册/登录屏幕在这一阶段似乎是最不重要的。不幸的是,这会重定向到www.domain.com/app/RouteTo/login,而不是www.domain.com/loginRight,这并不是字面意思。我不知道您为登录视图定义了什么路由。将该路由可能位于$location.url()方法的参数中。为了清楚起见,我编辑了答案。啊,对了。这里的问题是$location.url仍然重定向到应用程序的子路径。因此,使用$location.url('/login')重定向到www.domain.com/app/login而不是www.domain.com/loginWell,如问题中所述,当前登录页面位于AngularJS应用程序之外。因此需要重定向到www.domain.com/login,而不是应用程序中的路径。同样值得一提的是,您可能应该使用$window
,而不是window
(来源:)不要害怕!