2016-08-18 5 views
-2

Работа с API Карт Google и AngularJS (1.5.8). После создания маркеров в цикле я не могу получить к ним доступ после. Этот код внутри функции initMap:Почему я не могу получить доступ к массиву после цикла?

var markers = []; 

for(var i=0; i<10; i++){ 

    var html = $scope.posts[i].address; 

    var marker = new google.maps.Marker({ 
     map: map, 
     position: {lat: parseFloat($scope.posts[i].lat), lng: parseFloat($scope.posts[i].lng)} 
    }); 

    markers.push(marker); 

    bindInfoWindow(markers[i], map, infoWindow, html); 

} 

markers // no error messages, nothing 
console.log(markers); // still nothing 

EDIT:

Ошибка была в

for(var i=0; i<10; i++){ 

Изменен:

for(var i=0; i<$scope.posts.length; i++) 

Благодаря @Maxx и благодаря всем, кто пытался помогать . Это была глупая ошибка.

+0

Что случилось с этим: «маркеры // никаких сообщений об ошибках, ничего»? Возвращает ли маркер что-то прежде, чем вы нажмете его на маркеры? И какой метод bindInfoWindow делает? – Ionut

+0

Пожалуйста, разместите свой угловой код. Или любые другие детали, потому что это не кажется ясным вопросом. –

+0

@ Ionut, я имею в виду, что нет реакции на переменную маркера. Я думал, что консоль браузера покажет ошибку или что-то еще. Но ничего. – 49volro

ответ

3

Error: $scope.posts[i] is undefined"

Сценарий бросает исключение на линии var html = $scope.posts[i].address;. В этот момент он перестает работать. Следовательно, никогда не достигаетconsole.log(markers);

but.. I thought - OK, but it's working (markers are showing on map)

Вы находитесь в цикле. Некоторые из маркеров отображаются, тогда одно из значений не определено (не первое значение!), Поэтому вы получаете исключение, и скрипт останавливается.

Возможно, вы можете решить эту проблему, перейдя к length массива вместо жестко закодированных 10 элементов.

, think about that error later.

Всегда сначала обрабатывайте первую ошибку. Они часто являются причинами последующих ошибок.

Смежные вопросы