Vue2或Vue3项目引用百度地图

浏览器搜索百度地图开放平台控制台 ,登录百度账号,申请百度地图AK,创建应用即可。

方法一:静态加载百度地图API

第1步:在index.html里引入如下代码:

html 复制代码
<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/logo.svg">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>NB System</title>
    <!-- 引入百度API  -->
    <script type="text/javascript" src="https://api.map.baidu.com/api?type=webgl&v=3.0&ak=密钥AK"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>

第二步:在组件里使用百度地图的API了

bash 复制代码
<template>
  <div class="map-container">
    <div id="map" style="width: 100%; height: 400px;"></div>
  </div>
</template>

<script setup lang="ts">
  import { ref, onMounted } from 'vue';

  defineOptions({
    name: 'MapLocation', // 组件名称
  });

  // 补充 TS 类型声明(解决 BMapGL 未定义的报错)
  declare global {
    interface Window {
      BMapGL: any; // 百度地图核心对象
    }
  }

  // 地图实例
  let map: any = null;

  // 初始化地图(可选,仅渲染地图用)
  const initMap = () => {
    // 创建地图实例(中心点默认设为北京)
    map = new window.BMapGL.Map('map');
    map.centerAndZoom(new window.BMapGL.Point(116.404, 39.915), 12);
    map.enableScrollWheelZoom(true); // 开启滚轮缩放
  };
  
  // 组件挂载时初始化地图
  onMounted(() => {
    // 确保百度地图 API 加载完成
    if (window.BMapGL) {
      initMap();
    } else {
      alert('百度地图 API 加载失败,请检查 AK 是否正确');
    }
  });
</script>

<style scoped>
.map-container {
  padding: 20px;
}
</style>

方法二:动态加载百度地图API

第1步:在你的项目js资源文件夹下新建startBMapFun.js文件,内容如下:

javascript 复制代码
    /**
     * 加载百度地图api
     * @param {String} ak  百度地图的AK,必传
     */
    export default function startBMapFun(ak) {
      return new Promise(function(resolve, reject) {
        if (typeof window.BMap !== 'undefined') {
          resolve(window.BMap)
          return true
        }
        window.onBMapCallback = function() {
          resolve(window.BMap)
        }
        let script = document.createElement('script')
        script.type = 'text/javascript'
        script.src =
          'http://api.map.baidu.com/api?v=3.0&ak=' + ak + '&callback=onBMapCallback'
        script.onerror = reject
        document.head.appendChild(script)
      })
    }

第2步:在组件中引入startBMapFun函数:

javascript 复制代码
    import startBMapFun from '@/<资源文件夹>/startBMapFun.js'

第3步:在mounted中调用 startBMapFun(),就可以在组件中使用百度地图的API了,可以开始开发了:

javascript 复制代码
    //这里运用async/await 进行异步处理,保证BMap加载进来后才执行后面的操作
    async mounted() {
      await startBMapFun('密钥')
      ...
    }
相关推荐
杨大厨wd4 小时前
Vue3 业务组件封装别只会传 props:如何设计一个真正好用的组件
vue.js
前端那点事4 小时前
Vue3 script setup 语法糖最全教程!零基础吃透+项目落地+面试满分
前端·vue.js
费曼学习法4 小时前
React Hooks 源码级揭秘:为什么必须按顺序调用?
javascript·react.js
卷帘依旧5 小时前
Vue 响应式原理:Object.defineProperty vs Proxy 深度对比
前端·vue.js
ZC跨境爬虫5 小时前
跟着 MDN 学 HTML day_34:(深入XML 中的 CDATASection 接口)
xml·前端·html·html5·媒体
之歆5 小时前
DAY_20JavaScript 条件语句与循环结构深度学习(二)
前端·javascript
布局呆星5 小时前
Vue3 路由守卫详解:全局守卫、路由独享守卫、组件内守卫
前端·javascript·vue.js
小李子呢02115 小时前
前端八股Vue---ref操作 DOM 元素或组件,调用子组件方法
前端·javascript·vue.js
spmcor5 小时前
TypeScript 中 null 与 undefined 的区别 —— 一篇彻底搞懂的指南
typescript
Yoram5 小时前
Vue3 响应性:跨上下文的传递、转换与作用域控制
前端·vue.js