达到10 $ digest()次迭代。中止!当使用$ locationProvider.html5Mode(true)时;

时间:2013-06-17 11:31:08

标签: angularjs internet-explorer-8

我在IE8使用angular.js。

我在控制器上使用“"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;
}

更新

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>

2 个答案:

答案 0 :(得分:2)

我不知道这对你的问题有多重要,但我们也有同样的症状,也来自html5模式。我们手动引导,并在此过程中将class="ng-app"添加到html元素。这导致两个角度实例运行,一个我们配置(使用html5mode),另一个使用默认设置。

因此,这两个实例将争夺$location的内容,并且永远不会达到平衡。

解决方案是确保在我们手动引导时html元素是“原始的”。

注意:我们正在使用require.js,并且在异步加载元素时变得特别明显。

答案 1 :(得分:0)

我猜你在某个地方遇到了无限循环。

我将做一些假设,因为我没有HTML代码可以看到控制器的放置方式,但是这应该让你知道要注意什么。

我要假设,templateUrl: 'Template/T1.html',包含MainCntl

在页面加载时,$scope.$location.path('/Get');内部会调用MainCntl

这种情况会导致一个循环---每次页面加载时,你正在加载一个控制器,它将位置改变到同一页面,这是加载控制器......等等。

10 $digest() iterations reached. Aborting!来自这些循环。