2013-06-17 3 views
4

Я использую angular.js на IE8.

Я получаю: "10 $digest() iterations reached. Aborting!" Ошибка выполнения при использовании «$locationProvider.html5Mode(true);» на моем контроллере.

Мой код:

angular.module('MyApp', [], function ($routeProvider, $locationProvider) {  
    $routeProvider.when('/Get', { 
     templateUrl: 'Template/T1.html', 
     controller: RouteCtrl 
    }); 
    $routeProvider.when('/GetT2/T2', { 
     templateUrl: 'Template/T2.html', 
     controller: RouteCtrl 
    }); 

    $locationProvider.html5Mode(true); 
}); 


function MainCntl($scope, $route, $routeParams, $location) { 
    $scope.$route = $route; 
    $scope.$location = $location; 
    $scope.$routeParams = $routeParams; 
    $scope.$location.path('/Get'); 
} 

function RouteCtrl($scope, $route) { 
    $scope.params = $route; 
} 

UPDATE:

T1 и T2 не содержит ничего, связанного с угловым.

T1.html:

<h1>T1</h1> 
<p>T1</p> 

T2.html:

<h1>T2</h1> 
<p>T2</p> 

Вот где я использую мой контроллер:

<div id="content" ng-controller="MainCntl">   
      <div ng-view></div>   
     </div> 
+0

Зачем вам нужна $ scope. $ Location.path ('/ Get'); 'в MainCtrl? Вы можете использовать '$ routeProvider.otherwise ({redirectTo:"/Get "}); вместо этого. Это будет imho cleaner –

ответ

0

Im предполагаю, что вы работаете в бесконечный петля где-то.

Я собираюсь сделать некоторые предположения, потому что для меня нет html-кода, чтобы посмотреть, как устанавливаются контроллеры, но это должно дать вам представление о том, что нужно искать.

Im буду предполагать, что templateUrl: 'Template/T1.html', содержит MainCntl.

Нагрузка на страницу, ваш $scope.$location.path('/Get'); вызывается внутри MainCntl.

Такая ситуация может вызвать петлю --- каждый раз загружаю страницу, вы загружаете контроллер, который изменяет местоположение на ту же страницу, которая загружает контроллер ... и т.д. и т.п.

10 $digest() iterations reached. Aborting! происходит от этих видов петель.

+0

Спасибо, пожалуйста, уточните мое обновление – ohadinho

2

Я не знаю, насколько уместно это для вашей проблемы, но у нас были те же симптомы, также из режима html5. Мы вручную загрузили, а также во время этого процесса добавили class="ng-app" в элемент html. Это вызвало запуск двух угловых экземпляров, которые мы сконфигурировали (с html5mode on), а другой с настройками по умолчанию.

Таким образом, два экземпляра будут сражаться за содержимое $location, и он никогда не достигнет равновесия.

Решение заключалось в том, чтобы элемент html был «первозданным», когда мы загружаем вручную.

Примечание: мы используем require.js, и это стало особенно очевидным при асинхронной загрузке элементов.

Смежные вопросы