location.reload()给出错误

时间:2015-09-22 07:39:46

标签: angularjs

我使用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)

1 个答案:

答案 0 :(得分:0)

因为你的代码在这里:

$rootScope.$on('$locationChangeSuccess', function(e) {
    security.validateAuthToken();  
});

validateAuthToken失败时,函数$http.post将重新加载页面:

function(response) {
    location.reload();
},

重新加载页面会触发另一个新事件$locationChangeSuccess,它会再次调用$http.post ...所以来无限循环。你最好只是弹出一个说明初始化失败的模态,而不是重新加载页面。