赞
踩
npm install vue-baidu-map --save
在main.js中引入百度地图
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap , {
ak:"自己注册的ak码"
})
在使用到百度地图的组件中单独引入地图(比较推荐该方式,自己项目中实际使用的也是该方式)
// 写在自己需要用到的组件中
import BaiduMap from 'vue-baidu-map/components/map/Map.vue'
// 写在自己需要用到的组件中
import BaiduMap from 'vue-baidu-map/components/map/Map.vue'
components: {
BaiduMap
},
<template>
<baidu-map class="map"
:center="center" // 地图的中心点
:zoom="zoom" // 缩放程度
@ready="initMap" // 地图初始化事件
:scroll-wheel-zoom="true" // 是否支持鼠标缩放
></baidu-map>
</template>
data () { return { center: { // 经纬度 lng: 0, lat: 0 }, zoom: 3, // 地图展示级别、 BMap:null, // 百度地图对象 map:null, // 百度地图实例 } }, methods: { initMap ({BMap, map}) { this.BMap = BMap ; this.map = map; this.$set(this.center , 'lng' ,'需要传递的经纬度'); this.$set(this.center , 'lat' ,'需要传递的经纬度' ); this.zoom = '地图需要进行的缩放值'; } }
<baidu-map></baidu-map>
组件在使用时,一定要给一个高度,否则高度为0,无法初始化.map{
width: 60%;
height: 250px;
}
在使用<baidu-map></baidu-map>
一定要给定一个center
和zoom
属性,否则地图组件不会初始化
即使在自己的components中注册的组件为BaiduMap
,在使用template中最好也要使用<baidu-map></baidu-map>
,以免出现无法初始化的问题
在组件的ready回调函数中会返回两个参数,一个是BMap
,一个是map
,BMap
是当前百度地图对象,map是当前地图的实例化,所以如果使用百度地图的其他组件或者打算在实例化后进行一些操作,一定要写在ready回调中。
根据后台请求数据动态更新中心点地图无响应
说明:在请求到后台数据后,将坐标值传递为地图组件,但是地图在center中心点更新后无响应
解决方式:通过props
获取到从父组件传递过来的坐标值,对坐标值进行监听,当坐标值更新后及时修改data数据中的坐标。
watch:{
position(){
let { lon , lat } = this.position;
this.$set(this.center , 'lng' ,lon);
this.$set(this.center , 'lat' ,lat);
}
},
在组件中使用百度地图中的跳动子组件(同样适用于其他子组件)
说明:如何获取到实例对象进行子组件的调用?
解决方法:在ready回调函数中会有两个参数,一个是BMap
,一个是map
,BMap参数就是百度地图的对象,map是当前地图的实例,可以使用这两个参数像官方demo中new出新的子组件
// 带跳动标注的ready回调
initMap ({BMap, map}) {
this.BMap = BMap ;
this.map = map;
let { lon , lat } = this.position;
this.$set(this.center , 'lng' ,lon);
this.$set(this.center , 'lat' ,lat );
this.zoom = 8;
let point = new BMap.Point(lon ,lat);
let marker = new BMap.Marker(point); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
marker.setAnimation(2); // 跳动的动画
}
在ready回调函数中已经初始化了调动标注,再更新坐标值后无法更新跳动标注的问题
// 带标注的监听事件
watch:{
position(){
let { lon , lat } = this.position;
this.$set(this.center , 'lng' ,lon);
this.$set(this.center , 'lat' ,lat);
if (this.BMap !== null && this.map !== null){
let point = new this.BMap.Point(lon ,lat);
let marker = new this.BMap.Marker(point); // 创建标注
this.map.addOverlay(marker); // 将标注添加到地图中
marker.setAnimation(2); // 跳动的动画
}
}
},
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。