Vue2項(xiàng)目中對百度地圖的封裝使用詳解

百度地圖的使用:
vue項(xiàng)目,有個(gè) vue-baidu-map 可以用,但是好久不更新了。
React項(xiàng)目,百度官方出了個(gè)React版的,可以直接用,React-BMapGL。
除此以外,百度官方的都是 JavaScript API,這里以此來用vue封裝下,方便使用。
需求
- 組件按需引入。個(gè)人喜歡代碼干干凈凈,只要項(xiàng)目需要的功能就行了
- 簡單的封裝下,方便直接按官方文檔使用需要的功能,方便復(fù)用
- 基于Vue2 、JavaScript API v3.0
- 基于項(xiàng)目需求封裝,有些東西沒弄,需要的自己DIY吧
知識(shí)點(diǎn)
- Vue插槽 slot,方便在地圖上使用各種百度地圖功能
- Vue通知 emit、on。為了傳參,主要是獲取地圖map對象
- Vue組件封裝,加載地圖后,各種地圖功能,如:打點(diǎn)、劃線、彈窗等一系列的封裝使用
- 百度地圖自定義彈窗的實(shí)現(xiàn);彈窗調(diào)用vue內(nèi)部方法的實(shí)現(xiàn)
實(shí)現(xiàn)
components – bmap – index.vue
地圖單文件組件,主要代碼如下,具體參考代碼
<template>
<div class="bmap-view">
<div id="bmapcontainer" :style="{ height: mapHeight }" />
<slot />
</div>
</template>
<script>
import indexjs from './index.js'
export default {
...indexjs
}
</script>
<style lang='scss' scoped>
</style>components - bmap - bmap-jsapi-loader - index.js
百度地圖異步加載的處理文件,具體看代碼
components – map – index.js
地圖組件的業(yè)務(wù)代碼,可以配置地圖開放的屬性props和監(jiān)聽事件。
例如這里,開放了ak(申請的百度地圖key),styleId(百度地圖樣式id),zoom(縮放值),center(地圖加載默認(rèn)中心點(diǎn)),height(地圖默認(rèn)高度值)
主要代碼如下,具體參考代碼
import BMapLoader from './bmap-jsapi-loader'
export default {
name: 'BmapView',
props: {
ak: {
type: String,
default: 'ZMVYYKDUVYZIHl5ygAaKyBhs7Gkg24SX'
},
styleId: {
type: String,
default: '41d153e7e9e7bcda9541996853046c93'
},
zoom: {
type: Number,
default: 15
},
center: {
type: [Array, String],
default() {
return [113.22682, 23.410167]
}
},
height: {
type: Number | String,
default: 520
}
},
computed: {
mapHeight() {
return isNaN(this.height) ? this.height : `${this.height}px`
}
},
data() {
return {
map: ''
}
},
beforeDestroy() {
this.map = null
},
mounted() {
},
created() {
this.initMap()
},
methods: {
initMap() {
BMapLoader.load({
key: this.ak,
version: '3.0'
}).then((BMap) => {
this.map = new BMap.Map('bmapcontainer', {
enableBizAuthLogo: false
})
const point = new BMap.Point(this.center[0], this.center[1])
this.map.centerAndZoom(point, this.zoom)
this.map.setMapStyleV2({
styleId: this.styleId
})
this.$emit('bmap-ready', this.map)
}).catch(e => {
console.log(e)
})
}
},
watch: {}
}以上是使用百度地圖的基礎(chǔ)
調(diào)用方式
views - bmapTest - index.js
components: {
BmapView: () => import ('@/components/bmap/index.vue')
}views - bmapTest - index.vue
<bmap-view />
效果圖

打點(diǎn)控件封裝
參考文檔 jsapi_reference_3_0
具體去看 bMarker.vue 文件了,去除百度地圖的默認(rèn)彈窗樣式,真的太惡心了。 這里主要值得參考的是自定義彈窗時(shí),html里面通過vue的 runtimeCompiler: true運(yùn)行時(shí)編譯功能,可以調(diào)用vue里面的參數(shù)和方法,這里對于自定義是很方便的。
效果圖

代碼總覽
涉及的文件如下(具體參考代碼):
|-- public
|-- images // 注意,地圖需要到的圖片放這里
|-- src
|-- components
|-- bmap
|-- bmap-jsapi-loader
|-- index.js
|-- bMarker.vue // 打點(diǎn)、彈窗控件封裝
|-- index.vue // 地圖單文件組件,供界面調(diào)用
|-- index.js // 地圖初始化、配置相關(guān)
|-- views
|-- bmapTest // 演示實(shí)例所在
|-- index.vue
|-- index.scss
|-- index.js
代碼
按代碼總覽的目錄去代碼里找著看就行了。
總結(jié)
以上,只是簡單的封裝。百度地圖的api真的是不如高德地圖好用。以上的封裝已滿足本人項(xiàng)目需求,別的功能可以自己按需擴(kuò)展了。
到此這篇關(guān)于Vue2項(xiàng)目中對百度地圖封裝使用的文章就介紹到這了,更多相關(guān)Vue2百度地圖封裝使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目打包優(yōu)化的方法實(shí)戰(zhàn)記錄
最近入職了新公司,接手了一個(gè)新拆分出來的Vue項(xiàng)目,針對該項(xiàng)目做了個(gè)打包優(yōu)化,把經(jīng)驗(yàn)分享出來,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目打包優(yōu)化的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Vue reactive函數(shù)實(shí)現(xiàn)流程詳解
一個(gè)基本類型的數(shù)據(jù),想要變成響應(yīng)式數(shù)據(jù),那么需要通過ref函數(shù)包裹,而如果是一個(gè)對象的話,那么需要使用reactive函數(shù),這篇文章主要介紹了Vue reactive函數(shù)2023-01-01
vue-router中hash模式與history模式的區(qū)別
為了構(gòu)建 SPA(單頁面應(yīng)用),需要引入前端路由系統(tǒng),這就是 Vue-Router 存在的意義,而這篇文章主要給大家介紹了關(guān)于vue-router中兩種模式區(qū)別的相關(guān)資料,分別是hash模式、history模式,需要的朋友可以參考下2021-06-06
vue tab滾動(dòng)到一定高度,固定在頂部,點(diǎn)擊tab切換不同的內(nèi)容操作
這篇文章主要介紹了vue tab滾動(dòng)到一定高度,固定在頂部,點(diǎn)擊tab切換不同的內(nèi)容操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
基于Vue3實(shí)現(xiàn)印章徽章組件的示例代碼
這篇文章主要介紹了如何利用vue3實(shí)現(xiàn)簡單的印章徽章控件,文中通過示例代碼講解詳細(xì),需要的朋友們下面就跟隨小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

