@dimk00z

Не понимаю, как переменные работают в Angular?

$scope.geoObjects = [
				
						{ Name: "Москва, Слесарный переулок, д.3"},
						{ Name: "Люберцы, Октябрьский проспект д.143"},
						{ Name: "Москва, 3-я Хорошевская улица д.2, стр.1"},
						{ Name: "Москва, Нижний Сусальный переулок, д.5, стр.4"},
					
			];
    var geocodeQuery;
    for (var i = 0, ii = $scope.geoObjects.length; i < ii; i++) {
       
       geocodeQuery = $scope.geoObjects[i].Name;
        ymaps.geocode(geocodeQuery).then(function (res) {
            res.geoObjects.each(function(geoObject){
                $scope.$apply(function(){
                 $scope.geoObjects[i]=
                 {
                 	geometry:{
                            type:'Point',
                            coordinates:geoObject.geometry.getCoordinates(),
                            properties:{
                            // А в качестве контента балуна - подробности:
                            // имена всех остальных найденных объектов.
                            balloonContent:geoObject.properties.get('name')
                        }
                        }
                 };
                });
            });
        
        });
    }


Чуть измененный кусок кода из примеров angular-yandex-map, не понимаю, почему обновляется только последний элемент. В теле функции ymaps.geocode(geocodeQuery) i равен последнему значению. Почему так?
Спасибо
  • Вопрос задан
  • 319 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Вы не переменные в Ангуляре не понимаете, а области видимости и асинхронность в js.
https://learn.javascript.ru/task/make-army
Ответ написан
Комментировать
Потому что эта функция асинхронна и к моменту, когда она выполняется, цикл давно прошел, переменная i, соответственно, равна последнему значению
Создайте функцию и передайте туда $scope.geoObjects[i] в цикле, или просто i. Получится замыкание и значение уже не изменится
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы