В приведенном ниже коде,Доступ к локальной переменной в контроллере angularjs
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-loop не выполняется?
Поскольку AJAX означает «асинхронный ...», и вы ударяете свой цикл до того, как возвращается вызов '$ http'. – Antiga
HTTP.get вызов асинхронный, поэтому, когда цикл выполняется, rep.length по-прежнему 0. – Karmacon