window.location.href / reload导致AngularJS [$ rootScope:infdig] 10 $ digest()迭代达到

时间:2015-03-19 02:45:19

标签: javascript angularjs window.location

我知道这会导致问题,好像我要将window.location.href/reload更改为$location.path(),它运作正常。 现在,我在运行代码时没有看到任何性能错误(可用性)开玩笑,这会破坏IE中的应用程序,但在使用window时可以在Chrome中运行。

我正在做的是在用户登录/退出时强制某些更新反映在网站上,为此我需要在更改路由后刷新页面。使用$location.path$state.go更改我的网址,但不要重新加载/刷新页面以反映网站更新。

AngularJS是否有任何方法可以本地重定向和重新加载路由/页面而不会出现此循环警告/错误?或者有没有办法仍然使用window.location.href/reload,现在让AngularJS吓坏了?

错误

  

错误:[$ rootScope:infdig] 10 $ digest()迭代达成。中止!

     

Watchers在最后5次迭代中被解雇:[[“fn:function   $ locationWatch(){\ n var oldUrl = $ browser.url(); \ n var   currentReplace = $ location。$$ replace; \ n \ n if(!changeCounter ||   oldUrl!= $ location.absUrl()){\ n changeCounter ++; \ n
  $ rootScope。$ evalAsync(function(){\ n if   ($ rootScope。$ broadcast('$ locationChangeStart',$ location.absUrl(),   oldUrl)。\ n defaultPrevented){\ n
  $ location。$$ parse(oldUrl); \ n} else {\ n
  $ browser.url($ location.absUrl(),currentReplace); \ n
  afterLocationChange(oldUrl); \ n} \ n}); \ n} \ n
  $ location。$$ replace = false; \ n \ n返回changeCounter; \ n};   newVal:8; oldVal:7“,”fn:function(context){\ n try {\ n
  for(var i = 0,ii = length,part; i

然后在以下开头有一段长的错误:

  

[$ rootScope:infdig] 10 $ digest()迭代达成。中止!   观察者在最近5次迭代中被解雇....

2 个答案:

答案 0 :(得分:1)

您可以尝试替换setTimeout中的href。这对我的情况有帮助。

$setTimeout(function() { $window.location.href = newUrl; }, 500);

答案 1 :(得分:0)

$state实际上有reload()函数可以完成此操作:

$state.reload();

您可以在ui-router $ state docs中阅读相关内容。

如果您还需要重定向,可以通过将reload: true选项传递给$state.go()来强制重新加载状态转换:

$state.go('stateName', {}, {reload: true});