在vue中优雅地异步引入(懒加载)腾讯地图API

背景

接到一个需求需要在网站首页显示使用腾讯地图展示公司所在地。一开始我直接全局引入了腾讯地图js,结果发现在用户打开登陆页面的时候首页比较缓慢,为了提高用户登陆的加载效率,需要优化为异步引入。

思路

根据官网的示例,通过dom追加script的方式来加载js,并且在加载完成时会回调window下的callback方法。
截图官网示例
但是这么使用的话,每次都需要在当前组件中写一个全局的函数,A组件中写的回调函数可能覆盖B组件写的回调函数,或者每个人用的都不相同导致window下多了冗余函数,因此在参考了高德vue组件库:vue-amap中懒加载的实现后,想要在组件中通过Promise的方式异步引入腾讯地图API。

代码实现

TMapInit.js中的lazyTMapApiLoaderInstance实现(代码已上传gitee):

let lazyTMapApiLoaderInstance = null;
/*** 修改下列ak即可使用自己的授权码* 腾讯地图组件初始化, 要用到天气和地图控件必须引入当前js,* 通过lazyTMapApiLoaderInstance.then()能在地图载入完成时触发事件*/
export function initTMap() {loadTMapScript({// TODO:开发者申请的腾讯地图keyak: "XXXX-XXXX-XXXX",// 需要用到的插件libraries: ['service']})
}/*** 载入腾讯地图js文件* @param config*/
function loadTMapScript(config) {let concatStr = '';for (let lib of config.libraries) {concatStr += lib + ',';}// 引入腾讯地图js,当引入完成时会调用window.customVueTMap.loadCallBack方法const TMap_URL = "https://map.qq.com/api/gljs?v=1.exp&libraries=" + concatStr.substring(0, concatStr.length - 1) + "&key=" + config.ak + "&callback=customVueTMap.loadCallBack";// 插入script脚本let scriptNode = document.createElement("script");scriptNode.setAttribute("src", TMap_URL);document.body.appendChild(scriptNode);
}/*** 懒加载腾讯地图方法* @returns {Promise<unknown>}*/
lazyTMapApiLoaderInstance = new Promise((resolve, reject) => {initTMap();// 地图异步加载完成回调处理,避免每个组件都要在自己的功能写个window下的函数造成冲突window.customVueTMap = {loadCallBack() {resolve();}}
})
export {lazyTMapApiLoaderInstance};

TMapInit.js的使用示例

<template><div id="app"><div style="width: 90%; height: 500px;" id="myMap"></div></div>
</template><script>import {lazyTMapApiLoaderInstance} from './components/MyMap/util/TMapInit'lazyTMapApiLoaderInstance.then(() => {new TMap.Map('myMap', {center: new TMap.LatLng(39.909, 116.397),zoom: 11,pitch: 0})})
</script>

总结

通过这种方式,后续也能引入多个不同地图供应商的jsApi,而不用担心没用上的另外一个API耽误了我们页面的加载效率。

参考连接

官网异步加载API示例
高德地图Vue组件:gyy/vue-amap
懒加载腾讯地图API示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyCat 分片

更多内容&#xff0c;前往IT-BLOG 如今随着互联网的发展&#xff0c;数据的量级也是呈指数的增长&#xff0c;从GB到TB到PB。对数据的各种操作也是愈加的困难&#xff0c;传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它…

BACnet物联网关BL103:Modbus协议转BACnet/MSTP

随着物联网技术在楼宇自动化与暖通控制系统中的迅猛发展&#xff0c;构建一种既经济高效又高度可靠的协议转换物联网关成为了不可或缺的核心硬件组件。在此背景下&#xff0c;我们钡铼特别推荐一款主流的BAS&#xff08;楼宇自动化系统&#xff09;与BACnet物联网关——BL103&a…

C#实现深度优先搜索(Depth-First Search,DFS)算法

深度优先搜索&#xff08;DFS&#xff09;是一种图搜索算法&#xff0c;它尽可能深入一个分支&#xff0c;然后回溯并探索其他分支。以下是使用C#实现DFS的代码示例&#xff1a; using System; using System.Collections.Generic;class Graph {private int V; // 顶点的数量pr…

数据库表的行列转换(行转列,列转行)

目录 前言 行转列 创建测试表 score1 插入测试数据 需求与通用SQL写法 列转行 创建测试表 score2 插入测试数据 需求与通用SQL写法 前言 在工作中&#xff0c;多多少少都会遇到一些数据展示的需求&#xff0c;开发一个接口&#xff0c;从数据库中查询数据返回页面展示…

【目标检测】Yolo5基本使用

前言 默认安装好所有配置&#xff0c;只是基于Yolo5项目文件开始介绍的。基于配置好的PyCharm进行讲解配置。写下的只是些基本内容&#xff0c;方便以后回忆用。避免配置好Yolo5的环境&#xff0c;拉取好Yolo5项目后&#xff0c;不知道该如何下手。如果有时间&#xff0c;我还是…

30 列表常用方法——append()、insert()、extend()

append()、insert()、extend() 这 3 个方法都可以用于向列表对象中添加元素。 ① append() 用于向列表尾部追加一个元素。 ② insert() 用于向列表任意指定位置插入一个元素。 ③ extend() 用于将另一个列表中的所有元素追加至当前列表的尾部。 这 3 个方法都属于原地操作&…

【第二天】计算机网络 HTTP请求报文和响应报文是什么样的 HTTP请求方式有哪些 GET请求和POST请求的区别

HTTP请求报文和响应报文是什么样的&#xff1f; 我去&#xff0c;以前都没怎么研究过这个。 客户端发送一个请求给服务器&#xff0c;服务器根据请求报文中的信息进行处理&#xff0c;并将处理结果放到响应报文中返回给客户端。 URL HTTP使用URL (Uniform Resource Locator&…

从0开始搭建vue + flask 旅游景点数据分析系统(二):搭建基础框架

这一期目标是把系统的布局给搭建起来&#xff0c;采用一个非常简单的后端管理风格&#xff0c;可以参考官方的页面 https://element.eleme.cn/#/zh-CN/component/container 下面我们开始搭建&#xff0c;首先&#xff0c;安装一下vue-router&#xff0c;element-ui npm insta…

css 作业 2

文章目录 前言第四题第五题第六题第七题第八题第九题第十题&#xff08;子标签&#xff09; 前言 昨天写了前面三次作业&#xff0c;今天把剩下的七个作业写完 第四题 http://127.0.0.1:5500/index1.html&#xff0c;就用这个网址查看代码在网页的展示效果 代码评测过不了&…

650Kg大载重双旋翼无人直升机技术详解

大载重双旋翼无人直升机&#xff0c;作为现代航空技术的杰出代表&#xff0c;其设计巧妙融合了高效能、高稳定性与灵活性。该机采用经典的双旋翼布局&#xff0c;有效解决了传统单旋翼直升机尾桨产生的复杂气动力问题&#xff0c;极大提升了飞行稳定性和安全性。机体结构采用轻…

网页突然被恶意跳转或无法打开?DNS污染怎么解决?

前言 在网上冲浪时&#xff0c;我们时常会遭遇DNS污染这一区域性攻击&#xff0c;几乎无人能幸免。受影响时&#xff1a;尝试访问正规网站可能会被错误导向赌博、色情或其他恶意站点。 1.我们为什么需要DNS 当我们想要访问一个网站时&#xff0c;就像拨打朋友的电话号码一样…

Java聚合快递小程序对接云洋系统程序app源码

​一场物流效率的革命 引言&#xff1a;物流新时代的序章 在数字化浪潮席卷各行各业的今天&#xff0c;物流行业也迎来了前所未有的变革。为了进一步提升物流效率&#xff0c;优化用户体验&#xff0c;聚合快递系统与云洋系统小程序的对接成为了行业内外关注的焦点。这一创新…

教务管理平台/高校教务管理系统的设计与实现/教务网站/学生成绩管理系统/学生课程管理系统

获取源码联系方式请查看文章结尾&#x1f345; 摘 要 伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来…

python_基础编程_字典、集合

字典类型&#xff1a; 一、什么是字典 字典&#xff1a;是py内置的数据结构之一&#xff0c;与列表一样是一个可变的序列&#xff0c;以键值对的方式存储数据&#xff0c;是一个无序的序列 二、字典的原理 实现原理&#xff1a;Py根据key查找value所在的位置 三、字典的创…

Win11安装Docker

下载Docker Desktop for Windows 下载 下载连接&#xff1a;Install Docker Desktop on Windows | Docker Docs 地址在国外&#xff0c;需要科学上网。也可使用我提供的&#xff0c;百度网盘&#xff1a;https://pan.baidu.com/s/1232TTkkzLsoZyFjC3bmgiQ 安装 下载完成之后…

java深浅拷贝

目录 1、浅拷贝与深拷贝的区别 浅拷贝 深拷贝 2、浅拷贝实现 3、深拷贝实现 来都来了点个赞收藏一下再走呗~~~&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339; 1、浅拷贝与深拷贝的区别 浅拷贝 定义&#xff1a;浅拷贝创建了一个新的对象&#xff0…

数据容器-小结

目录 一、数据容器特点比较 二、数据容器操作小结 1、通用序列操作 2、通用的转换操作 3、案例演示 一、数据容器特点比较 二、数据容器操作小结 1、通用序列操作 2、通用的转换操作 3、案例演示 1&#xff09;list([iterable])&#xff1a;转换成列表 str_a "…

Vue.js 2 项目实战(八):小黑记事本组件版

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计初衷是通过采用简洁且强大的结构&#xff0c;使前端开发变得更简单和高效。以下是对 Vue.js 的详细介绍&#xff1a; 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&#xff0c;通过数据绑…

Python酷库之旅-第三方库Pandas(049)

目录 一、用法精讲 176、pandas.Series.rank方法 176-1、语法 176-2、参数 176-3、功能 176-4、返回值 176-5、说明 176-6、用法 176-6-1、数据准备 176-6-2、代码示例 176-6-3、结果输出 177、pandas.Series.sem方法 177-1、语法 177-2、参数 177-3、功能 177…

深入探索Python3网络爬虫:构建数据抓取与解析的强大工具

前言 在当今这个信息爆炸的时代&#xff0c;数据成为了驱动各行各业发展的关键要素。无论是市场分析、用户行为研究&#xff0c;还是内容聚合与推荐系统&#xff0c;都需要从海量的互联网数据中提取有价值的信息。而网络爬虫&#xff0c;作为自动化获取网页数据的技术手段&…