Angularjs $http 服务中的 for 循环计数器
Angularjs for-loop counter in $http service
我在 angular 中使用下面的 for 循环。我的问题是 forItr 计数器反映为在使用 $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++) {
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);
});
}
}
}]);
日志:
post 之前的 foritr:0
post 之后的 foritr:1
forItr没有完成for循环怎么变成“1”?无论如何,有没有参考计数器的for循环值?
非常感谢
那是因为它在 $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);
}
}
}]);
您需要使用一些闭包函数,该函数在函数结束前会保留其值。您可以通过 Angular 方式将 foreach
替换为 angular.forEach
来创建自己的函数,并且在该函数中值和索引将始终可用
代码
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);
});
});
我在 angular 中使用下面的 for 循环。我的问题是 forItr 计数器反映为在使用 $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++) {
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);
});
}
}
}]);
日志: post 之前的 foritr:0 post 之后的 foritr:1
forItr没有完成for循环怎么变成“1”?无论如何,有没有参考计数器的for循环值?
非常感谢
那是因为它在 $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);
}
}
}]);
您需要使用一些闭包函数,该函数在函数结束前会保留其值。您可以通过 Angular 方式将 foreach
替换为 angular.forEach
来创建自己的函数,并且在该函数中值和索引将始终可用
代码
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);
});
});