在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,一经查实,立即删除!

相关文章

探究Python函数不同类型参数异同

1 问题 本文主要探究Python中函数的不同类型的参数的异同。具体来说&#xff0c;将分析位置参数、关键字参数、默认参数和可变参数的定义、使用方式及其在函数调用中的差异&#xff0c;将有关参数的知识整合重构。 2 方法 查阅相关资料&#xff0c;初步找到找到了位置参数、关键…

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;从数据库中查询数据返回页面展示…

HTML开发小技巧:根据用户浏览器的分辨率调整控件的大小

在Html页面开发中&#xff0c;我们通常会用Style进行控件的宽度高度进行控件的格式设置&#xff0c;如果直接设置像素的话&#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&…

解释 Spring 框架的核心模块(如 IoC 容器、AOP )及其工作原理。描述如何使用 Spring Boot 快速搭建一个 RESTful Web服务?

Spring框架是一个广泛使用的Java企业级应用程序开发框架&#xff0c;它提供了一系列的模块来帮助开发者构建健壮、可测试、可维护的应用程序。 其中&#xff0c;最核心的模块包括IoC容器和AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;。 …

从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;就像拨打朋友的电话号码一样…

C语言之.*(链表,循环链表,队列,循环队列)

C语言之.*&#xff08;链表&#xff0c;循环链表&#xff0c;队列&#xff0c;循环队列&#xff09;的应用

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

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

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

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

python_基础编程_字典、集合

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

语义分割笔记

在语义分割任务中&#xff0c;提升自制数据集上baseline model的平均交并比&#xff08;mIoU&#xff09;和平均精度&#xff08;mAcc&#xff09;的难度取决于多个因素。以下是一些关键因素及其对难度的影响&#xff1a; 数据集质量&#xff1a; 标注质量&#xff1a;高质量的…

Win11安装Docker

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