vue項目 調用百度地圖 BMap is not defined

此次老闆新接了一個四點半官網頁面,使用vue來寫。emm……我感受整我的都很差了,兩天半解決了20個靜態頁面。還好vue寫頁面簡直飛快,遇到一個vue的新坑,使用百度地圖。javascript

研究了好一會,老是報錯BMap is not definedphp

我只有一個頁面須要用到地圖,因此我是使用cdn引入的方式來寫的,並無像網上一些教程同樣使用npm引入安裝。css

直接簡單粗暴的根據百度地圖api來寫,雖然報錯。那就解決報錯的bug就好了。好了,下面開始說說步驟html

在須要頁面的處引入cdn:vue

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰"></script>

個人是在</template>標籤結尾後引用的java

在webpack配置裏module.exports中加個externals:webpack

 

module.exports = { context: path.resolve(__dirname, '../'), entry: { // app: './src/main.js' app: ["babel-polyfill", "./src/main.js"] //引入babel-polyfill 兼容IE },  externals: { "BMap": "BMap" }, }

 

此處依舊報錯web

接着,使用異步加載npm

新建一個map.js,裏邊的內容api

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

相關文章
相關標籤/搜索