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 ...
随机推荐
- Asp.net MVC 权限验证,以及是否允许匿名访问
public class CheckUserAttribute : ActionFilterAttribute, IAuthorizationFilter { public void OnAuthor ...
- Maven中依赖的scope的依赖范围
在Maven中依赖的域有这几个:import.provided.runtime.compile.system.test 1compile 的范围 当依赖的scope为compile的时候,那么当前这个 ...
- 利用select/poll监听多个设备详解
如果一个应用程序去处理多个设备,例如应用程序读取网路数据,按键,串口,一般能想到的有三种方法: 方法1:串行+阻塞的方式读取:while(1) { read(标准输入);read(网络);}缺点:每当 ...
- 【mybatis源码学习】mybatis的参数处理
一.mybatis的参数处理以及参数取值 1.单个参数 mybatis不做任何处理 取值方式: #{参数名/任意名} <!-- Employee getEmpById(Integer id) ...
- JavaXXX成长直通车_汇总
学习开始于2019-12-08 阶段一 阶段一-01.万丈高楼,地基首要-第1章 学习指南-1-1 课程导学 1-2是图片 阶段一-01.万丈高楼,地基首要-第1章 学习指南-1-3 大型网站架构演变 ...
- teamviewer破解版
简介 TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制的应用程序,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamView ...
- idea的groovy设置
idea的groovy设置 groovy使用的是java的jdk 新建groovy项目,第一次新建的时候,Groovy library是空的,需要点击右边的Create...新建. 但是由于brew ...
- java的字节码bytecode
字节码名字的由来 字节码以一个字节即8bit为最小单位储存:字节码是java程序编译后的结果:字节码是一组8位字节为基础单位的二进制流 Java从源文件到执行的过程. 如何阅读JAVA字节码
- Go语言中的值类型和引用类型
一.值类型和引用类型值类型:int.float.bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中.当使用等号=将一个变量的值赋给另一个变 ...
- ubuntu18.04LTS服务器用vituralenv安装和配置pytorch和tensorflow
============tensorflow================= $ python3 -m venv tf14====输入例子====# $ vim ~/.bashrc #(添加如下行, ...