๐ Google Maps Autocomplete API ๊ตฌํ | Vue.js
vue.js
์์ Google Maps API๋ก Places Autocomplete Service๋ฅผ ์ฝ๊ฒ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํฉ๋๋ค.NOTE: the picture is fancy because I use VUETIFY. This tutorial just explains how Google Places API work, with no CSS! ๐
All we need is a vue component and a plugin called vue-meta (I already use it for SEO)
๋จผ์ Places.vue๋ผ๋ ํ์ผ์ ์์ฑํฉ๋๋ค.
// Places.vue
<template>
<div>
<input type="text" v-model="location">
<ul>
<li v-for="(result, i) in searchResults" :key="i">
{{ result }} // list of all places
</li>
</ul>
</div>
</template>
์ด์ ๋์ผํ ํ์ผ์
script
ํ๊ทธ๋ฅผ ์ถ๊ฐํ๊ณ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.// Places.vue
<script>
export default {
data: () => ({
location: '',
searchResults: [],
service: null // will reveal this later ๐ต๏ธ
})
}
</script>
์ค์นvue-meta ํ๋ฌ๊ทธ์ธ โ ์ค๋ช ์๊ฐ ๋งค์ฐ ์ฝ๊ณ ๋ค๋ฅธ vue ํ๋ฌ๊ทธ์ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋ฉ๋๋ค.
Places.vue์
metaInfo hook
๋ฃ๊ธฐ -// Places.vue
<script>
export default {
data, // already wrote above
metaInfo () {
return {
script: [{
src: `https://maps.googleapis.com/maps/api/js?key=<YOUR_API_KEY>&libraries=places`,
async: true,
defer: true,
callback: () => this.MapsInit() // will declare it in methods
}]
}
}
}
</script>
์ฌ๊ธฐ์ ๋ด๊ฐ metaInfo๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ตฌ์ฑ ์์๊ฐ ๋ ๋๋ง๋ ๋๋ง ์ด๋ ์ค์ ์ธ๋ถ JS ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
์ด์ ๊ณ์ ์งํํ์ฌ ๊ฐ์ฅ ๊ธฐ๋ค๋ ค์จ
methods
ํํฌ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.// Places.vue
<script>
export default {
data // defined already,
metaInfo // defined already,
methods: {
MapsInit () {
this.service = new window.google.maps.places.AutocompleteService()
},
displaySuggestions (predictions, status) {
if (status !== window.google.maps.places.PlacesServiceStatus.OK) {
this.searchResults = []
return
}
this.searchResults = predictions.map(prediction => prediction.description)
}
}
}
</script>
MapsInit ๋ฐ displaySuggestions ํจ์๊ฐ ์ํํ๋ ์์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
MapInit()โ-โthe function that is called when the JS file is loaded.
์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๋ - AutocompleteService๋ผ๋ Google ์ฅ์ ์๋น์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค(์ง๊ธ ๊ท์ฐฎ๊ฒ ํ์ง ๋ง์ธ์! ๊ทธ๊ฒ ์์ด ์ด ์ ์๋ค๋ฉด google ์ค๋ช ์๋ฅผ ํ์ธํ์ธ์ ๐คท).
๋์ค์ ๋ค์ ์ฌ์ฉํ ์ ์๋๋ก ์ด AutocompleteService()๋ฅผ ๋ฐ์ดํฐ ์์ฑ 'service'์ ํ ๋นํฉ๋๋ค.
displaySuggestions(predictions, status)โ-โexplained a little later.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ํผ์ฆ์ ๋ง์ง๋ง ์กฐ๊ฐ์ ๋๋ค.
watcher
์์ฑ์ location
// Places.vue
<script>
export default {
data // already defined,
methods // already defined,
metaInfo // already defined,
// the magical part
watch: {
location (newValue) {
if (newValue) {
this.service.getPlacePredictions({
input: this.location,
types: ['(cities)']
}, this.displaySuggestions)
}
}
}
}
</script>
๋ฐ๋ผ์ ์ ๋ ฅ ํ๋์ ๋ฌด์์ ์ ๋ ฅํ๋ ์์น ์์ฑ์ด ๋ณ๊ฒฝ๋๊ณ ์์น ์์ฑ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋น์ค ์์ฑ์ ์ฐ๊ฒฐ๋ getPlacePredictions ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
getPlacePredictions๋ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํฉ๋๋ค.
ใ . ์ ๋ ฅ - ์์ธกํ ์ฟผ๋ฆฌ(์ด ๊ฒฝ์ฐ
this.locations
).๋น. ์ ํ - ๊ฒฐ๊ณผ ์ ํ.
๋ชจ๋ ๋๋ฌ์ต๋๋ค!
์ฌ๋ฏธ์๊ฒ ์ฝ์ผ์๊ณ ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋์ จ๋ค๋ฉด
Consider Buying me a coffee?
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ Google Maps Autocomplete API ๊ตฌํ | Vue.js), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/arora/places-autocomplete-service-by-google-maps-api-vue-js-js-client-side-d29ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค