我有一个应用程序可以登录,并且必须决定用户是否可以在登录或未登录的情况下访问某些页面。我遇到的问题是,在到达特定路线后,我不需要模板,但我调用服务来处理将它们发送到登录页面或让它们继续。该服务检查他们是否已登录,如果没有,是否使用 window.location.href 将他们发送到登录路由。
当它到达 window.location.href 行时,登录控制器被无限初始化(达到 10 次 $digest() 迭代)并且在那之后没有任何工作。就重定向与散列有关的内容而言,我是否遗漏了一些东西?
这只发生在IE9中。循环问题不会发生在 chrome 和 safari 中。
路由代码:
angular.module('myApp', []).config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/login', {templateUrl: 'partials/login.html', controller: 'LoginCtrl', title:'Login'})
.when('/register', {template : " ", controller: 'RegisterCtrl', title:'Register'})
.when('/eBooks', {resolve: {redirect: 'LoginRouter'}});
}]);
处理登录路由的服务:
.service('LoginRouter', ['RouteService', '$rootScope', '$window', function(RouteService, $rootScope, $window) {
if (!$rootScope.isLoggedIn) {
RouteService.setModule("eBooks");
$window.location.href = "#/login"; // Causing infinite loop
}
else {
var config = $rootScope.config;
$rootScope.startLoading();
$window.location.href = config.EBOOK_URL+ "&bookId=" + config.bookId.replace("-","");
}
}]);
登录控制器:
.controller('LoginCtrl',['$scope' ,'LoginService', function ($scope, LoginService) {
$scope.user = {mtn: ""};
$scope.checkUser = function() {
LoginService.validateUser($scope);
};
}]);
注意:我将代码更改为指向带有锚标记和href 指向“登录”的html模板,它工作得很好。只有当我直接通过窗口触发位置更改时,它才会卡在循环中。
更新:我从 login.html 模板中删除了所有内容,以查看 html 中的某些内容是否导致问题,删除了所有指令以及控制器范围和 rootScope 上的任何函数/模型,但问题仍然存在。
更新 2我尝试使用 angular 强制单击锚点以尝试绕过问题,但它仍然会发生。我注意到的一件有趣的事情是,如果我在 IE 中打开控制台窗口,那么问题甚至不会首先发生。到底是怎么回事????