当前位置: 首页 > news >正文

vue3使用异步加载腾讯地图

vue3中之前是在index.html中全局加载

<!doctype html>
<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/logo.png" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title><%= VITE_APP_TITLE %></title><script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=您的key&libraries=drawing"></script>
</head><body><div id="app"></div><script type="module" src="/src/main.ts"></script>
</body></html>


现在需要异步加载腾讯地图,key的话是从后端获取的,大概来记录下

第一步:新建文件夹tencent-map.ts,进行从后端获取key(我这边的key后端加了密,我这需要进行用CryptoJS进行解密),然后进行载入腾讯地图js获取api

import { GetMapKey } from '@CM/api/common'
import CryptoJS from 'crypto-js'//获取腾讯地图的key
export const getMapKeyFun = async () => {const res = await GetMapKey()const { type, value } = resif (type == 'SUCCESS') {const secretKey = 'MKhmEob9b5iU2iHG'const keyUtf8 = CryptoJS.enc.Utf8.parse(secretKey)const encryptedHex = CryptoJS.enc.Hex.parse(value)const encryptedBase64 = CryptoJS.enc.Base64.stringify(encryptedHex)const decrypted = CryptoJS.AES.decrypt(encryptedBase64, keyUtf8, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7})return decrypted.toString(CryptoJS.enc.Utf8)}
}/*** 载入腾讯地图js文件* @param config*/
const loadTMapScript=async()=> {const key = await  getMapKeyFun();// 引入腾讯地图js,当引入完成时会调用window.customVueTMap.loadCallBack方法const TMap_URL = `https://map.qq.com/api/js?v=2.exp&key=${key}&libraries=drawing&callback=customVueTMap.loadCallBack`;// 插入script脚本let scriptNode = document.createElement("script");scriptNode.setAttribute("src", TMap_URL);document.body.appendChild(scriptNode);
}/*** 懒加载腾讯地图方法* @returns {Promise<unknown>}*/const lazyTMapApiLoaderInstance = new Promise<void>((resolve, reject) => {loadTMapScript()// 地图异步加载完成回调处理,避免每个组件都要在自己的功能写个window下的函数造成冲突window.customVueTMap = {loadCallBack() {resolve();}}
})
export {lazyTMapApiLoaderInstance};

第二步:在组件中使用

<script lang="ts" setup>
import { lazyTMapApiLoaderInstance } from '@CG/utils/tencent-map'declare const qq: any // 临时声明,待定义onMounted(() => {lazyTMapApiLoaderInstance.then(() => {new qq.maps.Map(document.getElementById('container'), {center: new qq.maps.LatLng(39.908165, 116.397165),zoom: 15,mapTypeControl: false,zoomControlOptions: {position: qq.maps.ControlPosition.TOP_RIGHT},panControlOptions: {position: qq.maps.ControlPosition.TOP_RIGHT}})})
})
</script>

http://www.lryc.cn/news/598767.html

相关文章:

  • 低速信号设计之 JTAG 篇
  • Spring Bean生命周期七步曲:定义、实例化、初始化、使用、销毁
  • Datawhale AI夏令营学习笔记:大模型微调与数据处理实践
  • 01_FOC学习之先让电机转动起来
  • 长糖链皂苷的生物合成研究进展-文献精读149
  • FreeRTOS—计数型信号量
  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(3)
  • 【自动化运维神器Ansible】Ansible常用模块之shell模块详解
  • 深入解析Hadoop NameNode的Full GC问题、堆外内存泄漏及元数据分治策略
  • Lua(数组)
  • DBA常用数据库查询语句(2)
  • 详解FreeRTOS开发过程(六)-- 队列
  • Redis操作
  • PostgreSQL 跨库查询方法
  • CMake ARGV变量使用指南
  • 基于C语言的Zynq SOC FPGA嵌入式裸机设计和开发教程
  • 外企本土化布局对国内连接器企业影响几何?
  • 模型的存储、加载和部署
  • rust-切片类型
  • centos7中把nginx更新到1.26 版(centos7默认只能更新到1.20)
  • IROS-2025 | OIKG:基于观察-图交互与关键细节引导的视觉语言导航
  • 【LeetCode 热题 100】39. 组合总和——(解法一)选或不选
  • windwos11网页切换残留/卡屏/冻结/残影问题
  • Java学习---Spring及其衍生(下)
  • 基于SpringBoot+Vue的电脑维修管理系统(WebSocket实时聊天、Echarts图形化分析)
  • 类和包的可见性
  • 磁性材料如何破解服务器电源高频损耗难题?
  • Linux C 网络基础编程
  • Redis高可用架构演进面试笔记
  • 13-C语言:第13天笔记