Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular JS:IE错误:已达到10$digest()迭代次数。流产_Javascript_Angularjs - Fatal编程技术网

Javascript Angular JS:IE错误:已达到10$digest()迭代次数。流产

Javascript Angular JS:IE错误:已达到10$digest()迭代次数。流产,javascript,angularjs,Javascript,Angularjs,我对Angular是个新手,我被一个关于IE的问题困扰着 这是我得到的IE错误 Webpage error details User Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) Timestamp: Thu, 13 Dec 2012 04:00:46 UTC Message: 10 $digest() iterations reached. Aborting! Watchers fired i

我对Angular是个新手,我被一个关于IE的问题困扰着

这是我得到的IE错误

Webpage error details

User Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Timestamp: Thu, 13 Dec 2012 04:00:46 UTC


Message: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: [["fn: function $locationWatch() {\n      var oldUrl = $browser.url();\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n\tchangeCounter++;\n\t$rootScope.$evalAsync(function() {\n\t  if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n\t      defaultPrevented) {\n\t    $location.$$parse(oldUrl);\n\t  } else {\n\t    $browser.url($location.absUrl(), $location.$$replace);\n\t    $location.$$replace = false;\n\t    afterLocationChange(oldUrl);\n\t  }\n\t});\n      }\n\n      return changeCounter;\n    }; newVal: 7; oldVal: 6"],["fn: function $locationWatch() {\n      var oldUrl = $browser.url();\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n\tchangeCounter++;\n\t$rootScope.$evalAsync(function() {\n\t  if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n\t      defaultPrevented) {\n\t    $location.$$parse(oldUrl);\n\t  } else {\n\t    $browser.url($location.absUrl(), $location.$$replace);\n\t    $location.$$replace = false;\n\t    afterLocationChange(oldUrl);\n\t  }\n\t});\n      }\n\n      return changeCounter;\n    }; newVal: 8; oldVal: 7"],["fn: function $locationWatch() {\n      var oldUrl = $browser.url();\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n\tchangeCounter++;\n\t$rootScope.$evalAsync(function() {\n\t  if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n\t      defaultPrevented) {\n\t    $location.$$parse(oldUrl);\n\t  } else {\n\t    $browser.url($location.absUrl(), $location.$$replace);\n\t    $location.$$replace = false;\n\t    afterLocationChange(oldUrl);\n\t  }\n\t});\n      }\n\n      return changeCounter;\n    }; newVal: 9; oldVal: 8"],["fn: function $locationWatch() {\n      var oldUrl = $browser.url();\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n\tchangeCounter++;\n\t$rootScope.$evalAsync(function() {\n\t  if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n\t      defaultPrevented) {\n\t    $location.$$parse(oldUrl);\n\t  } else {\n\t    $browser.url($location.absUrl(), $location.$$replace);\n\t    $location.$$replace = false;\n\t    afterLocationChange(oldUrl);\n\t  }\n\t});\n      }\n\n      return changeCounter;\n    }; newVal: 10; oldVal: 9"],["fn: function $locationWatch() {\n      var oldUrl = $browser.url();\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n\tchangeCounter++;\n\t$rootScope.$evalAsync(function() {\n\t  if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n\t      defaultPrevented) {\n\t    $location.$$parse(oldUrl);\n\t  } else {\n\t    $browser.url($location.absUrl(), $location.$$replace);\n\t    $location.$$replace = false;\n\t    afterLocationChange(oldUrl);\n\t  }\n\t});\n      }\n\n      return changeCounter;\n    }; newVal: 11; oldVal: 10"]]
Line: 7859
Char: 6
Code: 0
URI: http://localhost:8080/__assets__/lib/angular/angular.js
除了IE 8和IE 9之外,其他任何浏览器都不会出现这种情况

我有一只手表在看一个包含位置过滤器的内容过滤对象


我的问题是,为什么除了IE之外,其他浏览器上都不会出现这种情况?我应该怎么做才能摆脱这种情况。提前感谢。

我可以从您的错误报告中看出,您有一个$watch作为changeCounter变量,此watcher函数:

function $locationWatch() {
    var oldUrl = $browser.url();
    if (!changeCounter || oldUrl != $location.absUrl()) {
        changeCounter++;
        $rootScope.$evalAsync(function () {
            if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl)
                .defaultPrevented) {
                $location.$$parse(oldUrl);
            } else {
                $browser.url($location.absUrl(), $location.$$replace);
                $location.$$replace = false;
                afterLocationChange(oldUrl);
            }
        });
    }
    return changeCounter;
};
如果$browser.url()不等于$location.absUrl(),则changeCounter的值将递增。由于$watch函数只能执行10次更改/反应循环,因此在这10次迭代之后它将出错。当您更改正在查看的值时,它最终会中断


我将记录这些值-$location.absUrl()和$browser.url(),并查看为什么在其他浏览器中匹配,但在ie中不匹配。

我遇到了相同的错误问题,看起来相同。Chrome\FF工作正常,但IE失败。我在我的应用程序中点击了一些链接,有时会出现这个错误,有时不会

1) 在我看来,我几乎没有这样的链接:

<a href="#" ng-click="addIP(ip)">Add some IP</a>
$scope.IpRanges.push(ip);
3) 集合本身通过ng repeat绑定到视图上,我认为IE无法很好地处理这种情况-绑定\添加\应用事件的顺序可能不正确,否则。。。同样在点击链接后,我在url中添加了#符号,有时它会闪烁,然后我得到了一个错误。因此,我删除了href属性,一切正常:

<a href="" ng-click="addCurrentIP()">Add as allowed IP</a>


对于类似的情况,最好使用span或div。

蒂亚戈·罗尔多(Tiago Roldão)绝对正确。我有完全相同的问题。调试后,我在代码中意识到

location.hash = "#/app/" + id;
这会导致无限循环问题。经过一些研究,我发现了这个

$location.path("/apps/" + id);
它完美地解决了我的问题。

TLDR 如果您正在使用,那么您也可以使用

$state.go('details', {id:item.ID});
背景 我正在使用以下功能从列表视图导航到详细信息视图,以便您可以使用列表中的
ng click=“details(item)”
单击任何内容:

$scope.details = function (item) {
    $window.location.href = "#/details/" + item.ID;
}
但我在IE中得到了可怕的
10$digest()迭代次数

供参考 在Tiago的回答之后,我在AngularJS v1.2.0rc1 angular.js第7650行中放置了一个断点

// update browser
var changeCounter = 0;
$rootScope.$watch(function $locationWatch() {
  var oldUrl = $browser.url();
  var currentReplace = $location.$$replace;

  if (!changeCounter || oldUrl != $location.absUrl()) {
    changeCounter++; /* <-- breakpoint here, line 7650 */
    $rootScope.$evalAsync(function() {
      if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).
          defaultPrevented) {
        $location.$$parse(oldUrl);
      } else {
        $browser.url($location.absUrl(), currentReplace);
        afterLocationChange(oldUrl);
      }
    });
  }
  $location.$$replace = false;

  return changeCounter;
});
//更新浏览器
var changeCounter=0;
$rootScope.$watch(函数$locationWatch(){
var oldUrl=$browser.url();
var currentReplace=$location.$$replace;
如果(!changeCounter | | oldUrl!=$location.absUrl()){

changeCounter++;/*在调用$window.history.back()时,我在IE9、IE10中使用AngularJS v1.2.13时遇到了同样的问题(尤其是在Windows Phone中)

根本原因似乎是IE中的$window.history.back()在$locationWatch()被激发之前更改了href,因此oldUrl将包含新Url,并将角度转换为无限的$digest

直接的解决方法是将对$window.history.back()的调用替换为以下内容:

setTimeout(function () 
{
    $window.history.back();
}, 0);

我在IE 10中遇到了一个问题。 我在用

window.location.href = '#/';
为了改变路线。 将其替换为 以下代码

$location.path('/');

已解决此问题

我在尝试重定向到其他页面时遇到此问题

$window.location.href = '#/path/'
通过更改为解决:

$location.path('/path/');

谢谢你的回复,蒂亚戈。但我得告诉你,这不是我写的函数。这是angular.js作为库函数提供的函数。AngularJS还观看了这一过程。你有没有想到这个问题?对我有用!谢谢!完美!非常感谢:)非常感谢。如果我不知道这是爱的帖子,我会死掉的!嘿,非常感谢!!我花了很多时间,但这解决了我的问题!!删除整个href属性是为了meBravo!解决了我的问题…出于好奇-你是怎么发现的?我想知道你是否有一个在Windows Pho上调试问题的既定流程ne?只需使用IE11或IE10调试网站,并模拟正确的设备和文档模式,它就可以在99%的时间内解决我的问题。但我想知道“setTimeout”是如何解决这个问题的:timeout(函数(){history.go(-1);});