Vue2 + 高德地图API 获取用户当前位置等信息,错误default.CitySearch is not a Constructor的应对

效果

高德地图API参考手册

在这里插入图片描述
控制台输出信息:
在这里插入图片描述

代码

public/index.html:使用CDN引入高德地图API

    <script type="text/javascript">
            window._AMapSecurityConfig = {
              securityJsCode:'',  //安全秘钥(官网文档强调2021年12月2日起,新申请的Key就必须和安全秘钥一起使用了) 或者服务器地址
                // 例如 :serviceHost:'http://1.1.1.1:80/_AMapService',
            }
    </script>
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你申请到的Key&plugin=AMap.CitySearch"></script> 

注意这里有个坑,在官网文档没说,就是CDN里填了你的key之后,要么加上&plugin=AMap.CitySearch, API2, API3, ...设置好你要用的插件,要么在你自己的函数里,在使用高德API之前,使用AMap.plugin('API', ()=>{})引入,否则不会生效,且控制台会出现类似这种报错: default.APIxxx is not a Constructor

然后是下面这个配置项

vue.config.js

module.exports = defineConfig({
    configureWebpack: {
        externals:{
            AMap: "window.AMap" //注意
        }
    },
});

yourComponent.vue

<template>
	<div>
		 <p>{{locationNow}}</p>
	</div>
</template>

<script>
import AMap from 'AMap'

export default{
	data(){
		return {
			locationNow: ""; //初始化
		}
	},
	methods:{
    	getLocation(){
        	var citySearch = new AMap.CitySearch();
       	 	citySearch.getLocalCity((status, result) => { //status是返回的状态码,'complete'表示成功
        											  	  //result是一个Object,装有getLocalCity返回的结果
    	  		//console.log(result)  --> 这里输出result,如果服务申请错了,会在控制台打印USERKEY_PLAT_NOMATCH
          	if (status === 'complete' && result.info === 'OK') {
              	this.locationNow = result.province + result.city
              	//getLocalCity()是自动获取用户当前Ip并通过Ip获取当前地址
              	//getLocalCity()得到的结果里,最终用得上的只有province和city
          	}
        	})
    	}	
	},
	mounted(){
		this.getLocation();
	}
}		
</script>

流程

代码在上面,这里是高德开放平台那边的流程,开放平台那边是获取服务,也有个坑

先进入开放平台,进入控制台
在这里插入图片描述
然后进入 应用管理 --> 我的应用
在这里插入图片描述
然后最右边创建新应用 --> 输入名字和类型后
在这里插入图片描述
关键来了,如果你是开发Web网页使用,那么选择web端(JS API),别错选web服务!

在这里插入图片描述
提交之后就是写代码了

注意事项

主要注意服务类型的选择,还有CDN里加上在key后加上&plugin=AMap.API1, API2,另外别忘了现在新申请的Key都要和安全秘钥一起使用

如果在Vue项目中使用高德地图时遇到了“AMap.Driving is not a constructor错误,这可能是因为您未正确引入Driving插件或引入方式不正确。 在Vue项目中使用高德地图,可以通过在main.js文件中引入高德地图API并注册为全局变量来实现全局使用。例如: ```javascript // main.js import Vue from 'vue' import App from './App.vue' // 引入高德地图API import AMap from 'AMap' Vue.config.productionTip = false // 注册高德地图API为全局变量 Vue.prototype.AMap = AMap new Vue({ render: h => h(App), }).$mount('#app') ``` 在上面的代码中,我们引入了高德地图API,并通过Vue.prototype将其注册为Vue的全局变量,使其在所有组件中可用。 然后,您可以在Vue组件中使用AMap对象和Driving类来计算路线并绘制路径。例如: ```javascript <template> <div id="mapContainer" style="height:500px"></div> </template> <script> export default { data() { return { map: null, driving: null } }, mounted() { // 初始化地图 this.map = new this.AMap.Map('mapContainer', { center: [116.397428, 39.90923], zoom: 13 }); // 创建Driving对象 this.driving = new this.AMap.Driving({ map: this.map, panel: 'panel' }); // 计算路线 var points = [ [116.379028, 39.865042], [116.414032, 39.865042], [116.414032, 39.899042], [116.379028, 39.899042] ]; this.driving.search(points, (status, result) => { if (status === 'complete' && result.info === 'OK') { // 获取路线经纬度坐标数组 var path = result.routes[0].path; // 创建Polyline对象绘制路径曲线 var polyline = new this.AMap.Polyline({ path: path, strokeColor: '#3366FF', strokeWeight: 5, strokeOpacity: 0.8 }); polyline.setMap(this.map); } else { alert('路线计算失败'); } }); } } </script> ``` 在上面的代码中,我们在Vue组件的mounted生命周期函数中创建了地图和Driving对象,并计算了路线。请注意,我们使用Vue.prototype.AMap和this.AMap来访问全局的AMap对象,并使用this.AMap.Driving来访问Driving类。这样,您就可以在Vue项目中使用高德地图API,而不必担心“AMap.Driving is not a constructor错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六时二一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值