這次老板新接了一個四點半官網頁面,使用vue來寫。emm……我感覺整個人都不好了,兩天半解決了20個靜態頁面。還好vue寫頁面簡直飛快,遇到一個vue的新坑,使用百度地圖。
研究了好一會,總是報錯BMap is not defined
我只有一個頁面需要用到地圖,所以我是使用cdn引入的方式來寫的,並沒有像網上一些教程一樣使用npm引入安裝。
直接簡單粗暴的根據百度地圖api來寫,雖然報錯。那就解決報錯的bug就行了。好了,下面開始說說步驟
在需要頁面的處引入cdn:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰"></script>
我的是在</template>標簽結尾后引用的
在webpack配置里module.exports中加個externals:
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
// app: './src/main.js'
app: ["babel-polyfill", "./src/main.js"] //引入babel-polyfill 兼容IE
},
externals: { "BMap": "BMap" },
}
此處依舊報錯
接着,使用異步加載
新建一個map.js,里邊的內容
export function map(ak) { return new Promise(function (resolve, reject) { window.onload = function () { resolve(BMap) } var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://api.map.baidu.com/api?v=2.0&ak="+ak+"&callback=init"; script.onerror = reject; document.head.appendChild(script); }) }
在需要頁面import進來,
import {map} from '@/map.js'
最后掛載,在css上,記得設置地圖盒子寬高,不然顯示不出來
mounted () { this.$nextTick(function(){ var _this = this; MP(_this.ak).then(BMap => { var map = new BMap.Map("allmap"); var point = new BMap.Point(經緯度,經緯度); map.centerAndZoom(point, 19); var marker = new BMap.Marker(point); // 創建標注 map.addOverlay(marker); // 將標注添加到地圖中 var label = new BMap.Label("公司名字",{offset:new BMap.Size(20,-10)}); label.setStyle({ borderColor : "black" }); //marker.addEventListener("click", function(){ //點擊彈出可去掉注釋 marker.setLabel(label); //開啟信息窗口 //}); //點擊彈出可去掉注釋 }) }) },
百度地圖生成器
http://api.map.baidu.com/lbsapi/creatmap/index.html
百度地圖拾取坐標系統
http://api.map.baidu.com/lbsapi/getpoint/index.html
百度地圖JavaScript API
http://lbsyun.baidu.com/index.php?title=jspopular
之前寫過一篇關於html上引用百度地圖的博文:https://www.cnblogs.com/web1/p/8519987.html