Как я могу сослаться на функцию в Vue 3 в строке HTML? (информационное окно Google Maps)

Я использую 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

Вы не можете сделать это таким образом. К счастью, можно ожидать, что в таких случаях html можно будет передавать не только как текст. «контент содержит либо строку текста, либо узел DOM для отображения в информационном окне»

Estus Flask 02.05.2023 06:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил эту проблему, используя этот код:

    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.

Другие вопросы по теме