3

Я запускаю 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

от Angular doc

This error occurs when the application's model becomes unstable and each $digest cycle triggers a state change and subsequent $digest cycle. Angular detects this situation and prevents an infinite loop from causing the browser to become unresponsive. For example, the situation can occur by setting up a watch on a path and subsequently updating the same path when the value changes.

$scope.$watch('foo', function() { $scope.foo = $scope.foo + 1; });

Здесь вы modifiy в вашей модели inlinesvg внутри вашей области. $ watch of inlinesvg (сбросил вашу функцию setLogoDimensions()). Вы не можете этого сделать

+0

Любая идея, почему эта ошибка возникает только в IE 11, а не в Firefox 52.3? –