我是AngularJS的新手,我正在构建一个示例应用程序。我想在我的网页上显示Google地图回复的结果。在这里,我传递了示例值,但页面循环并发出此错误:Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
var app = angular.module('myApp', ['ui.bootstrap']);
app.controller('myCon', function($scope, $http) {
$scope.getAddress = function(url){
return $http.get('https://maps.googleapis.com/maps/api/distancematrix/json?origins=Toronto+ON&destinations='+url+'&mode=driving').then(function(response){
return response.rows[0].elements[0].distance.text;
});
};
这是HTML页面:
<!DOCTYPE html>
<html lang="en" ng-app="myApp" ng-controller="myCon">
<head>
<meta charset="UTF-8">
<title>Angular Demo</title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
<script src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.12.0.js"></script>
<script src="js/app.js"></script>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="page">
{{getAddress('Ottawa')}}
</div>
</body>
</html>
答案 0 :(得分:2)
在插值{{xxx()}}
内调用函数时,需要注意。插值运行每个摘要周期并且您正在调用其中的函数,一切都很好,但随后在函数内进行$http
调用再次触发摘要周期(在它解决/拒绝后,每个承诺链和插值表达式再次被评估以稳定视图。 Angular将继续希望在每个消化周期后视图将保持稳定,但显然不是。 Angular会在内部循环,直到内部设置的最大限制为10倍(内部设置但可配置,但不能解决您的问题)并停止尝试稳定显示您在控制台中看到的错误。
只需在触发事件时拨打电话,不确定为什么要这么做。但是,当它被实例化时,您可以立即在控制器中执行此操作,并将数据作为属性绑定到视图。或者在特定事件发生期间绑定函数getAddress(url)
(我不能进一步推荐您从插值中调用getAddress('ottava')
的原因的有限知识)
在您的视图中的示例
{{distance.text}}
在控制器中:
$scope.distance = {};
//After getAddress definition call it directly from controller
$scope.getAddress('ottava').then(function(text){
$scope.distance.text = text
});