vue中异步加载地图

838 阅读1分钟

前言

传统引用高德地图方式是在index.html中引入,即可全局调用AMap。在混合开发中,按传统方法前端H5页面引入高德地图发现个奇怪的现象,就是地图文件没有被缓存,跳转每个页面都会重新加载。所以想到按需引入地图。

解决方案

新建一个MapLoader.js文件

export default function MapLoader() {
  return new Promise((resolve, reject) => {
    if (window.AMap) {
      resolve(window.AMap);
    } else {
      let script = document.createElement('script');
      script.type = 'text/javascript';
      script.async = true;
      // 注意callback
      script.src = 'https://webapi.amap.com/maps?v=1.4.10&key=你自己的key&callback=initAMap';
      script.onerror = reject;
      document.head.appendChild(script);
    }
    window.initAMap = () => {
      resolve(window.AMap);
    };
  });
}

组件中引用

import MapLoader from '@/assets/js/MapLoader.js';
let AMap = {};
// import AMap from 'AMap';

// 生命周期里
let that = this;
await MapLoader().then(_AMap => {
  AMap = _AMap;
  // that.mapInit(); 初始化地图
}, e => {
  console.log('加载失败', e);
});

总结

这样就做到了按需引用,不会在每个页面都加载该插件,这种方法基本可以引用任何第三方插件。