当前位置: 首页 > 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.dtcms.com/a/296609.html

相关文章:

  • 奈奎斯特定理与香农公式在说些什么?
  • Linux系统下使用apt下载系统组件对应版本的源码
  • 训练日志7.23
  • k8s常用命令介绍
  • 飞腾D3000PBF和UBOOT配置说明
  • Android15或AndroidU广播的发送流程
  • 阿里云ECS坑之dnf-makecache系统软件更新检测服务
  • Java面试宝典:Spring专题二
  • Access开发一键删除Excel指定工作表
  • Golang实现 - 实现只有表头的 Excel 模板,并在指定列添加了下拉框功能。生成的 Excel 文件在打开时,指定列的单元格会显示下拉选项
  • 笔记/使用Excel进行财务预测
  • 【超完整图文】在 Ubuntu 环境下安装 Qt Creator 4.7.0(较旧版本)
  • 亿级流量短剧平台架构演进:高并发场景下的微服务设计与性能调优
  • IP 证书全面解析:功能、类型与申请指南
  • 神经网络实战案例:用户情感分析模型
  • iview 部分用法
  • PyTorch常用Tensor形状变换函数详解
  • Spring中的循环依赖:解密、破局与架构启示
  • 第21章 常用的用户调查分析方法
  • 08 rk3568 模拟smi mdio RTL8367RB
  • 详解FreeRTOS开发过程(五)-- 系统内核控制函数及任务相关API函数
  • 遥感滑坡识别分割数据集labelme格式1893张1类别
  • 【java计算日期属于本月第几周通用方法】
  • 用生成模型解开视网膜图像的表征|文献速递-医学影像算法文献分享
  • 黄山派lvgl8学习笔记(3)导入陀螺仪传感器数据
  • 解决VSCode中“#include错误,请更新includePath“问题
  • 深度分析Java内存结构
  • 基础NLP | 01 机器学习 深度学习基础介绍
  • JavaScript 文件在页面渲染中的加载机制详解
  • CF每日5题(1500-1600)