Vue异步加载高德地图API
项目中用到了高德地图的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的更多相关文章
- vue 里面异步加载高德地图
前言 关于Vue 里面使用异步加载高德地图 项目中其实只有几处需要用到地图,不需要全局引入 在index文件中引入js会明显拖慢首屏加载速度,虽然可以使用异步加载script的方式解决,但是始终觉得不 ...
- arcgis 加载高德地图 es6的方式
目前很多arcgis 加载高德地图是dojo的方式 外部引入文件,现在改成这种方式 /** * Created by Administrator on 2018/5/14 0014. */ impor ...
- (转)Openlayers 2.X加载高德地图
http://blog.csdn.net/gisshixisheng/article/details/44853881 概述: 前面的有篇文章介绍了Openlayers 2.X下加载天地图,本节介绍O ...
- OpenLayers加载高德地图离线瓦片地图
本文使用OpenLayers最新版本V5.3.0演示:如何使用OpenLayer加载谷歌地球离线瓦片地图.OpenLayers 5.3.0下载地址为:https://github.com/openla ...
- vue 异步加载远程组件(支持编译less语法)
本代码已组件化,可以直接使用. 说明:本组件可以直接解析.vue文件,为了支持less语法解析,在组件中引入less.js,可在less官网下载. 组件代码 <template> < ...
- Arcgis api For silverlight 加载高德地图
原文 http://www.cnblogs.com/thinkaspx/archive/2012/11/13/2767752.html 地图仅供演示,研究使用.如要商用 请联系厂商. public c ...
- openLayers加载高德地图
之前用openlayers对高德,百度,腾讯,bing,supermap,天地图,arcgis,google等地图进行了对接,今天简单介绍一下openlayers+高德: 在Openlayers.La ...
- Vue中加载百度地图
借助百度地图的 LocalSearch 和 Autocomplete 两个方法 实现方式:通过promise以及百度地图的callback回调函数 map.js 1 export function M ...
- iOS unity 互相调用加载高德地图时
需要增加 mapView.delegate = self 这是一种设计模式,有的人称为代理,有的人称为委托,比如有A,B两个控制器,由A可以push到B,B可以pop回A,现在有一种情况,A中有一个l ...
随机推荐
- Java-Maven(十一):Maven 项目出现pom.xml错误:Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin
Maven项目出现ERROR: eclipse更新了Maven插件后,让后就出现了以下错误: Description Resource Path Location Type Conflicting l ...
- Python10个图像处理工具
原文地址:https://cloud.tencent.com/developer/article/1498116 译者 | 小韩 来源 | towardsdatascience [磐创AI导读]:本篇 ...
- Git push origin dev-rgq-istokenstatus 【dev-rgq-istokenstatus -> dev-rgq-istokenstatus】
RenGuoQiang@PC-RENGUOQIANG MINGW64 /d/zgg/zgg-crm (dev-rgq-istokenstatus) $ git push origin dev-rgq- ...
- mysql 5.6配置
简洁版: [client] port = 3306 socket = /weyeedata/mysql/run/mysql.sock [mysqld] innodb_buffer_pool_size ...
- 清除JAVA 项目中的注释
package com.lookcoder.inschool.utils; import java.io.BufferedReader; import java.io.File; import jav ...
- Spring cloud微服务安全实战-6-11sentinel之配置持久化
规则的持久化问题.现在的规则都是在内存里的,我们要写一些代码来编一些规则.启动以后规则在内存里了.如果你配置里面有sentinel的dashboard,有流量经过客户端的时候,它会把规则同步给Dash ...
- (生鲜项目)03. xadmin的配置
步骤1. 下载xadmin源码(git_hub上的源码已经不支持py3了,需要从其它老手那里获取),将本文件夹全部放置于合适的目录下(这里放到extra_apps内)2. 在settings的INST ...
- 腾讯明眸极速高清升级2.0,助力韩国赛事超高清5G直播
近期,由腾讯云联合韩国CUDO通信研究所及intel推出的tile方式的viewport流服务编码,已正式通过测试.届时韩国最新5G网络将基于腾讯明眸-极速高清2.0和腾讯云直播产品能力,在韩国国内率 ...
- 切换 Python2 Python3
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternati ...
- Linux下创建Oracle19C的数据库实例
接上一篇博客,安装 Oracle19chttps://www.cnblogs.com/xuzhaoyang/p/11264557.html 切换到root用户下,切换目录到db_1,执行,遇到选择路径 ...