Больше видеоконтента Ionic VueJS и ReactJS FiWiC YouTube Channel
Карты являются важной частью многих веб- и мобильных решений, а богатый набор функций, предоставляемых Google Maps, делает их очевидным выбором во многих ситуациях. Когда я искал решение, совместимое с Vue3, я действительно не нашел ничего, что мне понравилось бы, поэтому я решил посмотреть, как создать свое собственное.
В этом видео мы создаем компонент карты Google vue 3, используя более новый компонент SFC с настройкой. Мы добавим маркеры, информационные окна, обработчики событий и доступ к соответствующим службам по мере работы над серией видеороликов проекта.
Мы закончим каждое видео из этой серии, развернув приложение на устройствах IOS и Android, чтобы продемонстрировать Ionic Capacitor, который вы можете использовать для развертывания любой мобильной веб-платформы, веб-приложения и PWA.
НАСЛАЖДАЙТЕСЬ ЧАСТЬЮ 1
ССЫЛКИ
- Ionic Framework — это платформа для создания, защиты, развертывания и масштабирования современных нативных и мобильных веб-приложений на любой платформе. Ни одна платформа не обеспечивает большей производительности. Спереди назад, от начала до конца
- Capacitor — это нативная среда выполнения с открытым исходным кодом для создания веб-приложений. Создавайте кроссплатформенные приложения для iOS, Android и прогрессивные веб-приложения с помощью JavaScript, HTML и CSS.
- Javascript API Карт Google
- Вопросы о Typescript в Google Maps
ИСПОЛЬЗОВАНИЕ
Компонент можно использовать на своей странице, предварительно создав файл .env
для хранения ключа Google Maps.
VUE_APP_GOOGLEMAPS_KEY="AIzaSyDfu-PKZ1zO8POkdlrSWG36pLZEtbH5cz8"
и в родительском компоненте
<g-map
:disableUI="false"
:zoom="12"
mapType="roadmap"
:center="{ lat: 38.8977859, lng: -77.0057621 }">
</g-map>
ИСХОДНЫЙ КОД
<template> <div class="map" ref="mapDivRef"></div> </template>
<script> import { ref, onBeforeMount, onMounted } from "vue";
export default { name: "GMap", props: { center: { lat: Number, lng: Number }, zoom: Number, mapType: String, disableUI: Boolean }, setup(props) { // the google map object const map = ref(null);
// the map element in the templste const mapDivRef = ref(null);
// load in the google script onMounted(() => { // key is is the .env file const key = process.env.VUE_APP_GOOGLEMAPS_KEY;
// create the script element to load const googleMapScript = document.createElement("SCRIPT"); googleMapScript.setAttribute( "src", `https://maps.googleapis.com/maps/api/js?key=${key}&callback=initMap` ); googleMapScript.setAttribute("defer", ""); googleMapScript.setAttribute("async", ""); document.head.appendChild(googleMapScript); });
/** * this function is called as soon as the map is initialized */ window.initMap = () => { map.value = new window.google.maps.Map(mapDivRef.value, { mapTypeId: props.mapType || "hybrid", zoom: props.zoom || 8, disableDefaultUI: props.disableUI || false, center: props.center || { lat: 38.0, lng: -77.01 } }); };
return { mapDivRef }; } }; </script>
<style lang="css" scoped> .map { width: 100%; height: 300px; background-color: azure; } </style>