vue에서 kakao map api를 사용하는 중인데 index.html에 샘플 코드의 부분을 넣으면 문제 없이 작동하는데 다른 vue 파일에서 쓰려고 할 때 자꾸 kakao is not defined 이라는 에러를 냅니다.
앱키와 플랫폼은 잘 설정을 했기 때문에 html에서는 잘 동작한 거 같은데 vue에서는 어떻게 해야하는지 잘 모르겠습니다.
vue에서 kakao map api를 사용하는 중인데 index.html에 샘플 코드의 부분을 넣으면 문제 없이 작동하는데 다른 vue 파일에서 쓰려고 할 때 자꾸 kakao is not defined 이라는 에러를 냅니다.
앱키와 플랫폼은 잘 설정을 했기 때문에 html에서는 잘 동작한 거 같은데 vue에서는 어떻게 해야하는지 잘 모르겠습니다.
보내주신 내용 확인해보았는데 잘 안되네요… 답변해주셔서 정말 감사합니다!
kakao is not defined를 해결하지 못해서 일단 vue-daum-map를 이용해서 지도를 로드를 했었는데 이 방법은 기존 kakao api의 모든 기능을 다 쓸 수 없다고 생각해서 이 오류를 해결하고 싶었습니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>vuetify-admin-webpage</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
</head>
<body>
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=xxxx"></script>
<!-- <div id="map" style="width:500px;height:400px;"></div>
<script>
var container = document.getElementById('map');
var options = {
center: new kakao.maps.LatLng(33.450701, 126.570667),
level: 3
};
var map = new kakao.maps.Map(container, options); -->
</script>
<noscript>
<strong>We're sorry but vuetify-admin-webpage doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
이 코드에서 주석을 지우면 html에서 지도가 나옵니다. 하지만 저는 이 html에 지도가 나오는 것을 원한 것이 아니라서 script src만 두고 map.vue라는 파일에서 mounted할 때 map 정보를 가져오기로 했습니다.
<template>
<div id="map" style="width:500px;height:400px;"></div>
</template>
<script>
export default {
mounted () {
var container = document.getElementById('map');
var options = {
center: new kakao.maps.LatLng(33.450701, 126.570667),
level: 3
};
var map = new kakao.maps.Map(container, options);
}
}
</script>
로 했을 때 kakao is not defined라는 오류가 나옵니다.
<template>
<div id="app">
<div id="map"></div>
</div>
</template>
<script>
export default {
mounted() {
if (window.kakao && window.kakao.maps) {
this.initMap();
} else {
const script = document.createElement('script');
/* global kakao */
script.onload = () => kakao.maps.load(this.initMap);
script.src = 'http://dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=YOUR_APPKEY';
document.head.appendChild(script);
}
},
methods: {
initMap() {
var container = document.getElementById('map');
var options = {
center: new kakao.maps.LatLng(33.450701, 126.570667),
level: 3
};
var map = new kakao.maps.Map(container, options);
map.setMapTypeId(kakao.maps.MapTypeId.HYBRID);
}
}
}
</script>
<style>
#map {
width: 400px;
height: 300px;
}
</style>
와 지도가 잘 나옵니다! 참고해서 수정하도록 하겠습니다. 정말 감사합니다!!
nuxt 에서는 위 comment들이 모두 안먹히네요.
해결하는데 살짝 고생했어요.
혹시 nuxt에서 어떻게 하셨는지 알 수 있을까요?