Я использую Vue 3 и js API Google Maps.
Моя цель - щелкнуть маркер, который открывает информационное окно, и в этом окне есть кнопка, которую пользователь может щелкнуть, чтобы запустить некоторый код.
Я создал пользовательский HTML-элемент для входа в информационное окно, которое создается при нажатии маркера. Но я не могу ссылаться на свою функцию в этом пользовательском html.
Как я могу ссылаться на свою функцию в пользовательском html?
<script setup>
/* eslint-disable no-undef */
import { computed, ref, onMounted, onUnmounted, watch, reactive, toRaw } from 'vue'
import { useMapStore } from '../pinia/map'
import { Loader } from '@googlemaps/js-api-loader'
const mapStore = useMapStore()
//~~ MAPPING ~ load API
const GOOGLE_MAPS_API_KEY = import.meta.env.VITE_GAPI
const loader = new Loader({
apiKey: GOOGLE_MAPS_API_KEY,
version: 'beta',
libraries: ['marker']
})
const mapDiv = ref(null) // define divref to populate the map
let map = mapStore.map // get map from pinia store to persist map
const initMap = async () => {
await loader.load()
map = new google.maps.Map(mapDiv.value, {
center: { lat: 40, lng: -80 },
zoom: 4,
maxZoom: 19,
minZoom: 3
})
// create a new marker with custom content for the info window
const marker = new google.maps.Marker({
position: { lat: 40, lng: -80 },
map: map,
title: 'My Marker'
})
// create a new info window with custom HTML content
const infoWindowContent = '<div><h3>My Marker Info Window</h3><button onclick = "testFx()" >WORK</button></div>'
const infoWindow = new google.maps.InfoWindow({
content: infoWindowContent
})
// add an event listener to open the info window when the marker is clicked
marker.addListener('click', () => {
infoWindow.open(map, marker)
})
}
//~ initialize map
onMounted(async () => {
await initMap()
})
const testFx = () =>{
console.info('something worked');
}
</script>
<template>
<div style = "overflow-y: hidden">
<div ref = "mapDiv" style = "background-color: #4CAF50; width: 100%; height: 90vh"></div>
</div>
</template>
Этот код делает все, что мне нужно, кроме запуска функции. Я получаю эту ошибку:
Uncaught ReferenceError: testFx is not defined
at HTMLButtonElement.onclick



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я решил эту проблему, используя этот код:
marker.addListener('click', () => {
infoWindow.open(map, marker)
// add event listener when InfoWindow content is ready
google.maps.event.addListenerOnce(infoWindow, 'domready', () => {
const button = document.getElementById('my-button')
button.addEventListener('click', () => {
console.info('PUT FUNCTION HERE')
})
})
})
Теперь я могу ссылаться на функции в информационном окне Google Maps.
Вы не можете сделать это таким образом. К счастью, можно ожидать, что в таких случаях html можно будет передавать не только как текст. «контент содержит либо строку текста, либо узел DOM для отображения в информационном окне»