我在角度中使用以下for循环。我的问题是,使用$ http服务后,forItr计数器会反映为增加。
代码:
var app = angular.module('noviceApp', []);
app.controller('noviceAppController', ['$scope', '$http', function ($scope, $http) {
var iterations = 1;
$scope.myFunction = function() {
for(var forItr = 0; forItr < iterations; forItr++) {
var params = {};
params.testStr = forItr;
console.log("foritr before post: " + forItr);
$http.get('http://localhost:9200/_stats/index,store')
.success(function(data, status) {
console.log("foritr after post: " + forItr);
});
}
}
}]);
日志: postit之前的帖子:0 帖子之后的帖子:1
如果尚未完成for循环,forItr如何变为“1”?无论如何都要引用计数器的for循环值?
非常感谢
答案 0 :(得分:2)
那是因为它在$ http结束之前被更新了,你可以将它包装在一个闭包中来解决这个问题:
var app = angular.module('noviceApp', []);
app.controller('noviceAppController', ['$scope', '$http', function ($scope, $http) {
var iterations = 1;
$scope.myFunction = function() {
for(var forItr = 0; forItr < iterations; forItr++) {
(function(forItr){
var params = {};
params.testStr = forItr;
console.log("foritr before post: " + forItr);
$http.get('http://localhost:9200/_stats/index,store')
.success(function(data, status) {
console.log("foritr after post: " + forItr);
});
})(forItr);
}
}
}]);
答案 1 :(得分:0)
您需要使用一些闭包函数,该函数在函数结束之前具有其值。您可以通过将foreach
替换为创建自己的函数的angular.forEach
并在该函数值和&amp;中以Angular方式执行此操作。索引将始终可用
<强>代码强>
angular.forEach(iterations, function(value, index){
var params = {};
params.testStr = index;
console.log("Index before post: " + index);
$http.get('http://localhost:9200/_stats/index,store')
.success(function(data, status) {
console.log("Index after post: " + index);
});
});