vue中使用百度地图API写一个简单的组件(一)

这里先说明一下,像这种地图组件,个人感觉做成个组件比较合适,当然也可以直接写进页面里,就是复用性差一些。

2020.1.19日,修改一个bug,修改详情见第四步:调用

一、打开百度地图API官网,创建秘钥

点击这里打开官网
下滑浏览器,找到JavaScriptAPI。点击进去,里面便是开发文档,可以根据这里的开发文档使用。想快速构建的还是留在这里看我的吧!
在这里插入图片描述点击申请秘钥去申请一个秘钥,具体步骤请看这里
在这里插入图片描述

二、配置vue环境

1、在index.html中添加百度地图JavaScript API接口
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的秘钥" ></script>

下面是我自己项目中的例子

在这里插入图片描述

2、在webpack.base.conf.js配置文件中配置BMap,在module.exports 中与entry平级;如果还有其他的,同样在下面引入就可以了;修改完成之后重新 npm run dev
module.exports = {
 entry: {
 app: './src/main.js'
 },
 externals: {
 'BMap': 'BMap',
 'BMap_Symbol_SHAPE_POINT': 'BMap_Symbol_SHAPE_POINT'
 },

下面是我自己项目中的例子

在这里插入图片描述

三、在components文件夹中添加一个组件baiduMap.vue

这里是路径位置

在这里插入图片描述

这里是代码

<template>
	<div>
		<div class="baidumap" id="allmap">
			
		</div>
		<slot/>
	</div>
</template>

<script>
	import BMap from 'BMap'
	import BMapSymbolSHAPEPOINT from 'BMap_Symbol_SHAPE_POINT'
	export default {
		props: {
			msg:[],
		},
		name: 'baiduMap',
		data() {
			return {

			}
		},
		methods: {
			baiduMap() {
				var map = new BMap.Map('allmap')
				//左上角用于放大的组件
				map.addControl(new BMap.NavigationControl());
				//左下角公里数
				map.addControl(new BMap.ScaleControl());
				//右下角预览地图
				map.addControl(new BMap.OverviewMapControl());
				//右上角三种模式切换
				// map.addControl(new BMap.MapTypeControl());
				map.enableScrollWheelZoom(true);
				if (this.msg=='') {
					return;
				}
				var point = new BMap.Point(this.msg[0].x, this.msg[0].y)
				map.centerAndZoom(point, 13)
				var marker = new BMap.Marker(point) // 创建标注
				map.addOverlay(marker) // 将标注添加到地图中
				if (this.msg.length>=2) {
					this.addMarkers(map)
				} 
			},
			addMarkers(map){
				for(var i=1;i<this.msg.length;i++){
					var point = new BMap.Point(this.msg[i].x,this.msg[i].y)
					var marker = new BMap.Marker(point) // 创建标注
					map.addOverlay(marker) // 将标注添加到地图中
				}
			}
		},
		mounted() {
			this.baiduMap();
		}
	}
</script>

<style scoped="scoped">
	.baidumap {
		width: 100%;
		height: 55rem;
	}
</style>

这里我来讲解一下:首先创建一个<div class="baidumap" id="allmap"></div> 用于展示地图。然后用props接收父页面传递的参数,此参数用于标记地理位置(经度纬度),因为标记可能是多个,所以我们用数组的形式,这样我们的父页面直接传递过来一个带着经纬度的数组即可,里面还有一些组件和功能就请看注释吧!
注意:地图组件需要导入:

import BMap from 'BMap'
import BMapSymbolSHAPEPOINT from 'BMap_Symbol_SHAPE_POINT'

四、调用

2020.1.19修改:这里由于笔者的失误出现了一个非常弱智的bug,vue中请求是异步的,定位信息还没有传过来就已经开始渲染了组件,所以组件永远是初始值(位置),应当使用v-if等请求信息返回后再进行组件渲染!

小提示: 对于对vue不太玩的转的同学我这里说明一下,这里只能使用v-if而不能使用v-show,因为后者更像是“隐藏”,v-show会进行渲染,而v-if不会进行渲染,固要使用v-if


(下方代码已修改)

<template>
	<div>
		<baiduMap v-if="bool" :msg="points"></baiduMap>
	</div>
</template>

<script>
	import API from '@/api'
	import baiduMap from '@/components/ItemApi/baiduMap.vue'
	export default {
		name: 'index',
		data() {
			return {
				points:[{
					x:154.5387114725,
					y:37.0095785384
				}],
				//渲染键
				bool:false
			}
		},
		components:{
			baiduMap
		},
		methods: {
			getJWD(){
				const params={
					
				}
				API.bigConfig.getLonLat(params).then(({
					data
				}) => {
					if (data.code === '200') {
						this.points=data.body;
						this.bool=true
					} 
				})
			},
		},
		mounted() {
			this.getJWD()
		},
	}
</script>

<style scoped="scoped">
	.baidumap{
		width: 100%;
		height: 55rem;
	}
</style>


导入地图组件,直接展示且传递参数即可

五、效果

在这里插入图片描述大小可以根据css中去调,这里只是展示一个样版而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值