В угловом приложении я создаю круги на карте Google, используя следующий цикл:
for (this.ind in circles) {
var circle = new google.maps.Circle({
center: circles[this.ind].center,
radius: circles[this.ind].radius,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
draggable: true,
map: map
});
}
Когда круги созданы, я хочу щелкнуть по каждому из них и сделать его редактируемым, чтобы включить в цикл следующее (перед закрывающей фигурной скобкой):
google.maps.event.addListener(circle, 'click', (event) => {
console.info("click");
circle.setEditable(true);
});
Моя проблема заключается в том, что всякий раз, когда я нажимаю на круг, только последний становится редактируемым.
Моя цель — нажать на каждый круг, сделать его редактируемым, а затем применить слушателей к событиям center_changed и radius_changed.
Какие-либо предложения?





Используйте this внутри функции прослушивания кликов, это ссылка на кружок, по которому щелкнули.
google.maps.event.addListener(circle, 'click', (event) => {
console.info("click");
this.setEditable(true);
});
Я решил эту проблему, поместив каждую новую фигуру в массив, и я поймал событие щелчка, прокручивая массив:
let a = 0;
let indx;
let shapes = [];
for (indx in circles) {
var circle = new google.maps.Circle({
circleID: a,
center: circles[indx].center,
radius: circles[indx].radius,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
draggable: true,
// editable: true,
map: map
});
a++;
shapes.push(circle);
}
for (let i in shapes) {
google.maps.event.addListener(shapes[i], 'click', (event) => {
console.info(shapes[i].circleID)
}
}
Поэтому, когда я хочу добавить addListener к событию, я помещаю его в цикл for (let i in shapes).