我在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>
答案 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!
来自这些循环。