使用$ window或$ location在AngularJS中redirect
我正在处理的应用程序包含各种状态(使用ui路由器),其中一些州要求您login,其他人是公开的。
我创build了一个有效地检查用户是否login的方法,当前有什么问题实际上是在必要时redirect到login页面。 应该注意的是,login页面目前不在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正确显示了预期的URL。 在那之后,我尝试了几乎所有的事情,从$ window.open到window.location.href,不pipe我尝试过什么,都不会发生redirect。
编辑(已解决):
发现问题。
var landingUrl = $window.location.host + "/login"; $window.open(landingUrl, "_self");
variableslandingUrl被设置为'domain.com/login',这不会与$ window.location.href(这是我尝试的事情之一)的工作。 但是在改变代码之后
var landingUrl = "http://" + $window.location.host + "/login"; $window.location.href = landingUrl;
现在工作。
我相信这样做是$location.url('/RouteTo/Login');
编辑清晰度
说我的login视图的路线是/Login
,我会说$location.url('/Login')
导航到该路线。
对于Angular应用以外的位置(即没有定义路由),普通的旧JavaScript将服务器:
window.location = "http://www.domain.com/login"
看来,整个页面重新加载$window.location.href
是首选的方式。
浏览器URL更改时,不会导致整个页面重新加载。 要在更改URL后重新加载页面,请使用较低级别的API $ window.location.href。
它可能会帮助你! 演示
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; }; });
HTML代码示例
<div ng-app="urlApp"> <div ng-controller="urlCtrl"> Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a> </div> </div>
不知道从什么版本,但我使用1.3.14,你可以使用:
window.location.href = '/employee/1';
无需在控制器中注入$location
或$window
,也不需要获取当前的主机地址。
你必须把:
< html ng-app =“urlApp”ng-controller =“urlCtrl”>
这样angular函数可以访问“窗口”对象
- Angular UI路由器在没有URL的状态之间传递数据
- 清除历史logging和使用Ionic Frameworklogin/注销重新加载页面
- 如何在ui-router中使用ui-sref传递参数给控制器
- AngularJs中的$ routeProvider和$ stateProvider有什么区别?
- 如何使用ui-router为AngularJS提取查询参数?
- 在AngularJS中使用UI-Router将状态redirect到默认子状态
- 如何使用ui-view而不是ng-view使用ng-animate?
- Angular – UI路由器 – 以编程方式添加状态
- 使用Angular ui-router设置URL查询参数,无需更改状态