我正在运行Angular JS v1.4.7,并且该应用程序在Internet Explorer 10和11中完全崩溃(我们不支持旧版本)。当我检查控制台时,我看到:Error: [$rootScope:infdig]
,这有点解释为here。
它完美运行,其他浏览器没有错误。
经过大量的反复试验后,我能够将问题与其中一个指令中的一个逻辑区分开来,我已将其简化为:
tsApp.directive('svgIcon', function($timeout) {
return {
restrict: 'E',
replace: true,
scope: {
inlinesvg: '=',
orientation: '@',
themeid: '@',
scale: '@',
verticalAlign: '@'
},
template: '<span ng-bind-html="inlinesvg | unsafe"></span>',
link: function(scope, element, attrs) {
/* @TODO Synchronize with similar function in Mode Icon directive */
/* Function updates inlinesvg to avoid flicker */
scope.setLogoDimensions = function() {
/* Obtain svg attributes */
var svg = angular.element(scope.inlinesvg);
/* ... */
/* Reinsert raw svg with jQuery conversion */
scope.inlinesvg = $('<div>').append(svg.clone()).html();
};
/* Resize if new inlinesvg */
scope.$watch('inlinesvg', function() {
scope.setLogoDimensions();
});
}
};
});
我可以通过评论setLogoDimensions
的最后一行来开启/关闭问题:scope.inlinesvg = $('<div>').append(svg.clone()).html();
答案 0 :(得分:1)
当应用程序的模型变得不稳定时会发生此错误 每个$摘要周期触发状态更改和后续$摘要 周期。 Angular检测到这种情况并防止无限循环 从导致浏览器无响应。 例如,通过在路径上设置监视可以发生这种情况 并随后在值更改时更新相同的路径。
$ scope。$ watch(&#39; foo&#39;,function(){ $ scope.foo = $ scope.foo + 1; });
在这里,你要在你的范围内修改你的inlinesvg模型。$ watch of inlinesvg(抛出你的setLogoDimensions()函数)。 你不能这样做