我使用location.reload()
/ $window.location.reload()
函数重新加载我的角度应用,它会重新加载页面,但也会在控制台中生成以下错误:
[$ rootScope:infdig] 10 $ digest()迭代达成。中止!
我从app控制器的run方法调用validateAuthToken,它在内部调用location.reload()方法。
.run(function ($rootScope, $urlRouter, security, $location) {
$rootScope.$on('$locationChangeSuccess', function(e) {
security.validateAuthToken();
});
});

angular.module('security', [])
.factory('security', [ '$http', '$q', '$location', function($http, $q, $location) {
var service = {
validateAuthToken: function() {
var request = $http.post(url, params);
return request.then(
function(response) {
if(CONDITION_MEETS) {
location.reload();
}
},
function(error) {
});
}
return service;
}]);

完成错误跟踪:
Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.8/$rootScope/infdig?p0=10&p1=%5B%5D
at REGEX_STRING_REGEXP (angular.js:63)
at Scope.promises.$get.Scope.$digest (angular.js:14263)
at Scope.promises.$get.Scope.$apply (angular.js:14488)
at done (angular.js:9646)
at completeRequest (angular.js:9836)
at XMLHttpRequest.requestError (angular.js:9787)
答案 0 :(得分:0)
因为你的代码在这里:
$rootScope.$on('$locationChangeSuccess', function(e) {
security.validateAuthToken();
});
当validateAuthToken
失败时,函数$http.post
将重新加载页面:
function(response) {
location.reload();
},
重新加载页面会触发另一个新事件$locationChangeSuccess
,它会再次调用$http.post
...所以来无限循环。你最好只是弹出一个说明初始化失败的模态,而不是重新加载页面。