【发布时间】:2015-09-27 16:19:20
【问题描述】:
我在 $http 请求上遇到了无限循环问题。不知何故,它仅在复选框上变为无限,因为我正在更改附加到此复选框的变量的模型值。代码如下:
<div ng-repeat="contract in contracts">
<select ng-model="contract.name" ng-change="getTransliteratedMessage()"/>
<div ng-repeat="additionalContract in contract.additionalContracts">
<input type="text" ng-model="additionalContract.name"/>
<input type="checkbox" id="myCheckbox" ng-model="additionalContract.isMessage" ng-click="getTransliteratedMessage()"/>
<label for="myCheckbox">Some msg</label>
</div>
</div>
<textarea ng-model="transliteratedText"/>
这里是控制器方法:
$scope.getTransliteratedMessage = function() {
var transliterationPromises = [];
angular.forEach($scope.contracts, function(contract) {
transliterationPromises.push($http({method: 'GET', url: 'some/url', params: contract.name});
angular.forEach(contract.additionalContracts, function(addContract) {
if (addContract.isMessage) {
transliterationPromises.push($http({method: 'GET', url: 'some/url', params: addContract.name});
}
});
});
$q.all(transliterationPromises).then(function(results) {
angular.forEach(results, function(result) {
$scope.transliteratedText = $scope.transliteratedText + ' ' + result.data;
}
}
}
所以,问题来了——当我更改第一个合同
【问题讨论】:
-
我不太确定,你的代码有点混乱,但我的第一个猜测是你的 ng-repeat 生成的每个复选框都有相同的模型,因此你的 foreach 正在循环通过额外的合同和每次它为每个复选框推送 http 请求,因此通过单击 1 个复选框,您实际上会更改所有内容,但这只是我不太确定的猜测
-
只用一个复选框就完成了 - 仍然存在问题
-
那么我不太确定只是使用一些 console.logs 来确定循环发生的位置,我在你的代码中唯一看到的是你在 forEach 之后缺少一些)
标签: javascript arrays angularjs rest checkbox