项目中用到了高德地图的API以及UI组件库,因为是直接把引入script写在index.html中,项目打包后运行在服务器,用浏览器访问加载第一次时会非常慢,主要原因是加载高德地图相关的js(近一分钟),用户体验非常不好。

于是在网上找了些资料,改成异步加载的方式。以下是实现方案:

1.首先定义一个asyncLoadJs.js(这里用到了AMap和AMapUI):

// 异步加载高德地图API
export function loadMP() {
const mp = new Promise(function (resolve, reject) {
let hasLoaded1 = document.getElementById("amap");
if(hasLoaded1) { // 只加载一次
return
}
window.init = function () {
resolve(AMap)
};
let script = document.createElement("script");
script.type = "text/javascript";
script.src = "//webapi.amap.com/maps?v=1.4.6&key=[申请的key]&plugin=AMap.Driving,AMap.Geocoder,AMap.ToolBar&callback=init";
script.id = "amap";
script.onerror = reject;
document.head.appendChild(script);
});
const mpUI = new Promise(function (resolve,reject) {
let hasLoaded2 = document.getElementById("amapUI");
if(hasLoaded2) { // 只加载一次
return
}
let script2 = document.createElement("script");
script2.type = "text/javascript";
script2.src = "//webapi.amap.com/ui/1.0/main.js";
script2.id = 'amapUI';
script2.onerror = reject;
script2.onload = function(su){
resolve(AMapUI)
};
document.head.appendChild(script2);
});
return Promise.all([mp,mpUI])
.then(function (result) {
return result
}).catch(e=>{
console.log(e);})
}

2.然后在组件中引入并调用API:

/* posLocation.vue组件 */
import {loadMP} from '../../assets/js/asyncLoadJs'
...
created() {
// 加载高德地图API
loadMP().then(AMap => {
initAMapUI(); //这里调用initAMapUI初始化
});
},
methods: {
// 地址模糊搜索
placeAutoInput() {
AMap.plugin('AMap.Autocomplete', () => {
// 实例化Autocomplete
let autoOptions = {
city: '全国'
};
let autoComplete = new AMap.Autocomplete(autoOptions);
let keywords = this.value
autoComplete.search(keywords, (status, result) => {
if (status === 'no_data') {
this.isError = true
this.lng = ''
this.lat = ''
this.$emit('updateMs', this.name, {name: '', lng: '', lat: ''})
} else {
// 搜索成功时,result即是对应的匹配数据
if (result.info === 'OK') {
this.flag = true
this.isError = false
this.result = result.tips;
this.$nextTick(function () {
let resultList = document.getElementsByClassName('result-list')[0]
resultList.style.width = this.w
})
}
} })
})
},
// 地图选址
pickAddress(lon, lat) {
AMapUI.loadUI(['misc/PositionPicker'], function (PositionPicker) {
...
}); },
}
...

Vue异步加载高德地图API的更多相关文章

  1. vue 里面异步加载高德地图

    前言 关于Vue 里面使用异步加载高德地图 项目中其实只有几处需要用到地图,不需要全局引入 在index文件中引入js会明显拖慢首屏加载速度,虽然可以使用异步加载script的方式解决,但是始终觉得不 ...

  2. arcgis 加载高德地图 es6的方式

    目前很多arcgis 加载高德地图是dojo的方式 外部引入文件,现在改成这种方式 /** * Created by Administrator on 2018/5/14 0014. */ impor ...

  3. (转)Openlayers 2.X加载高德地图

    http://blog.csdn.net/gisshixisheng/article/details/44853881 概述: 前面的有篇文章介绍了Openlayers 2.X下加载天地图,本节介绍O ...

  4. OpenLayers加载高德地图离线瓦片地图

    本文使用OpenLayers最新版本V5.3.0演示:如何使用OpenLayer加载谷歌地球离线瓦片地图.OpenLayers 5.3.0下载地址为:https://github.com/openla ...

  5. vue 异步加载远程组件(支持编译less语法)

    本代码已组件化,可以直接使用. 说明:本组件可以直接解析.vue文件,为了支持less语法解析,在组件中引入less.js,可在less官网下载. 组件代码 <template> < ...

  6. Arcgis api For silverlight 加载高德地图

    原文 http://www.cnblogs.com/thinkaspx/archive/2012/11/13/2767752.html 地图仅供演示,研究使用.如要商用 请联系厂商. public c ...

  7. openLayers加载高德地图

    之前用openlayers对高德,百度,腾讯,bing,supermap,天地图,arcgis,google等地图进行了对接,今天简单介绍一下openlayers+高德: 在Openlayers.La ...

  8. Vue中加载百度地图

    借助百度地图的 LocalSearch 和 Autocomplete 两个方法 实现方式:通过promise以及百度地图的callback回调函数 map.js 1 export function M ...

  9. iOS unity 互相调用加载高德地图时

    需要增加 mapView.delegate = self 这是一种设计模式,有的人称为代理,有的人称为委托,比如有A,B两个控制器,由A可以push到B,B可以pop回A,现在有一种情况,A中有一个l ...

随机推荐

  1. Android 系统属性-SystemProperties详解***

    创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是androi ...

  2. Java实现批量将word文档转换成PDF

    先导入words的jar包 需要jar包的私聊我发你 代码如下:import com.aspose.words.Document;import java.io.File; public class W ...

  3. linux crontab 定时使用方法

    1.文件目录 00 07 * * * root cd /home/op/saiyan_game_center && venv/bin/python statistics_data/od ...

  4. Spring cloud微服务安全实战-7-9自定义日志采集的格式和内容

    怎么来控制输出的日志的格式.并且从日志里面提取出来我想要的一些信息. 整个的message是一个大的json格式字符串. 虽然是可以通过关键字搜索到.但是日志看起来并不舒服. 在我们的控制台,日志实际 ...

  5. Cannot start service WMSvc on computer '.'.

    批处理,管理员权限执形 taskkill /im wmsvc.exe /f net stop WMSVC net start WMSVC pause

  6. 查看rpm包spec文件

    $ rpm --scripts -qp kernel-2.6.32-431.el6.x86_64.rpm

  7. OpenSSL 创建自签名证书

    1.生成服务器私钥 openssl genrsa -out client.key 4096   2.生成证书签名请求(CSR) openssl req -new -key client.key -ou ...

  8. java获取当前项目路径System.getProperty("user.dir")

    System.getProperty("user.dir") 就是项目的文件夹绝对路径

  9. 转载:MFC之MessageBox、AfxMessageBox用法

    在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框. 在Win32 API程序中只有MessageBox这一种用法. 而在MFC中就有三各方法: .调用API中的MessageBox: ...

  10. Linux05 文件或目录的权限(ls、lsattr、chattr、chmod、chown、chgrp、file)

    一.查看文件或目录的权限:ls -al  文件名/目录名 keshengtao@LAPTOP-F9AFU4OK:~$ ls -al total drwxr-xr-x keshengtao keshen ...