【发布时间】:2014-07-06 02:49:37
【问题描述】:
我正在开发一个网站,您可以在其中搜索食物,看看它是水果还是蔬菜,或者两者都不是(因为我很无聊)。我决定使用 Angular,尽管我对它很陌生。 我开始收到此错误:$rootScope:infdig Infinite $digest Loop
这可能是也可能不是确切的措辞或错误,因为页面滞后太多,我无法打开 Javascript 控制台。
这是我的结果视图控制器:
app.controller('resultController', ['$scope', '$routeParams', '$http',
function($scope, $routeParams, $http) {
$scope.result = $routeParams.query;
$scope.whatIsIt = function() {
$http.get('json/foods.json').success(function(data) {
var lists = JSON.parse(data);
var itIsA = 'uuggghhhhh';
if (lists['fruit'].contains($scope.result)) {
itIsA = 'fruit';
} else if (lists['vegetable'].contains($scope.result)) {
itIsA = 'vegetable';
}
});
}
}]);
这是我的应用模块:
var app = angular.module('fruitOrNot', [
'ngRoute'
]);
app.config(['$routeProvider' ,
function($routeProvider) {
$routeProvider.when('/', {
templateUrl: 'layouts/fruit-search.html',
controller: 'searchController'
}).when('/:query', {
templateUrl: 'layouts/result.html',
controller: 'resultController'
});
}]);
这是 layouts/result.html:
<h1>{{ result }}</h1>
<p>{{ result }} is a {{ whatIsIt() }}</p>
所以我想知道是什么导致了$digest 循环错误,或者如何找出原因,因为我无法使用控制台。谢谢!
整个项目在 Github 上也是 here。
【问题讨论】:
-
创建一个plnkr.co
-
关于风格的说明——你应该将你的 http 请求分离到一个服务中。它们不应该在控制器中。
-
好的,谢谢,我会这样做的。
标签: javascript angularjs infinite-loop