在下面的代码中,
app.controller('Controller', function($scope, $http){
$scope.rep = [];
$scope.tot = {
name: '',
marketValue: 0,
cash: 0,
legend: 'none'
};
(function loadData(){
$http.get('result.json').
then(function(data) {
angular.forEach(data['data'],function(value, key){
$scope.rep[key] = value;
$scope.rep[key].marketValue = parseFloat(value.marketValue);
$scope.rep[key].cash = parseFloat(value.cash);
});
} ,
function(data) {
console.log("My error: " + data);
}
);
})(); // IIFE
for (var i = 0; i < $scope.rep.length; i++) {
$scope.tot.marketValue += $scope.rep[i].marketValue;
$scope.tot.cash += $scope.rep[i].cash;
}
});
$scope.rep
是一个局部变量,可以在IIFE的嵌套函数中访问。
IIFE执行后,没有进一步执行,平静终止执行。
控制台没有给出任何错误消息。
为什么for循环不执行?
答案 0 :(得分:1)
这可能是一个时间问题。也许for循环在$ http.get()返回结果之前执行。在初始化$ scope.rep之后,您是否尝试过执行for循环?
(function loadData(){
$http.get('result.json').
then(function(data) {
angular.forEach(data['data'],function(value, key){
$scope.rep[key] = value;
$scope.rep[key].marketValue = parseFloat(value.marketValue);
$scope.rep[key].cash = parseFloat(value.cash);
});
} ,
function(data) {
console.log("My error: " + data);
}
);
})
.then(function() {
for (var i = 0; i < $scope.rep.length; i++) {
$scope.totals.marketValue += $scope.rep[i].marketValue;
$scope.totals.cash += $scope.rep[i].cash;
}
})(); // IIFE
答案 1 :(得分:1)
$http.get()
返回一个promise,只有一旦该promise被解析,它才会运行.then()
块中的所有代码。 (如果promise已解决,则第一个成功回调一个,如果拒绝承诺,则返回第二个错误回调。)
当您的代码到达for循环时,您已收到$http.get()
的承诺对象,但您尚未在.then()
块内运行代码,您在$scope.rep
内设置值的位置。 for循环不会执行,因为$scope.rep.length
为0,所以没有迭代。
要解决此问题,您可以将for循环放在.then()
块中,如下所示:
(function loadData() {
$http.get('result.json')
.then(function (data) {
angular.forEach(data['data'], function (value, key) {
$scope.rep[key] = value;
$scope.rep[key].marketValue = parseFloat(value.marketValue);
$scope.rep[key].cash = parseFloat(value.cash);
});
for (var i = 0; i < $scope.rep.length; i++) {
$scope.tot.marketValue += $scope.rep[i].marketValue;
$scope.tot.cash += $scope.rep[i].cash;
}
}, function (data) {
console.log("My error: " + data);
});
})();
我相信应该这样做。