ログインするアプリがあり、ユーザーがログインしているかどうかにかかわらず、特定のページにアクセスできるかどうかを決定する必要があります。私が抱えている問題は、特定のルートに到達したときにテンプレートは必要ありませんが、サービスを呼び出してログインページへの送信または続行を処理することです。このサービスは、ユーザーがログインしているかどうかを確認し、ログインしていない場合は window.location.href を使用してログイン ルートに送信します。
window.location.href 行に到達すると、ログイン コントローラーが無限に初期化され (10 回の $digest() 反復に達します)、その時点以降は何も機能しません。リダイレクトがハッシュで行われる限り、何か不足していますか?
これはIE9でのみ発生します。ループの問題は、クロムやサファリでは発生しません。
宛先コード:
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が「login」を指すhtmlテンプレートを指すようにしましたが、問題なく機能しました。ループでスタックするのは、ウィンドウから直接場所の変更を開始したときだけです。
更新: login.html テンプレートからすべてを削除して、html 内の何かが問題を引き起こしているかどうかを確認し、すべてのディレクティブ、およびコントローラー スコープと rootScope の関数/モデルを削除しましたが、それでも問題が発生します。
更新 2 angular を使用して、アンカーをクリックして問題を回避しようとしましたが、それでも発生します。私が気づいた面白いことは、IE でコンソール ウィンドウを開いている場合、そもそも問題が発生しないことです。何が起こっている????