Angular JS错误:仅限IE 10和IE 11中的[$ rootScope:infdig]

时间:2016-04-20 23:05:35

标签: javascript angularjs internet-explorer internet-explorer-11 internet-explorer-10

我正在运行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();

1 个答案:

答案 0 :(得分:1)

来自Angular doc

  

当应用程序的模型变得不稳定时会发生此错误   每个$摘要周期触发状态更改和后续$摘要   周期。 Angular检测到这种情况并防止无限循环   从导致浏览器无响应。   例如,通过在路径上设置监视可以发生这种情况   并随后在值更改时更新相同的路径。

     

$ scope。$ watch(&#39; foo&#39;,function(){      $ scope.foo = $ scope.foo + 1;    });

在这里,你要在你的范围内修改你的inlinesvg模型。$ ​​watch of inlinesvg(抛出你的setLogoDimensions()函数)。 你不能这样做