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

Vue3侦听器监听数据变化早于mapContext初始化的问题

目录

  • 1 问题描述
  • 2 引发原因
  • 3 解决方法

1 问题描述

采用 uni-app 开发包含地图功能的小程序,有时需要使用侦听器 watch 监听地图组件的某个属性,当其变化时,需要操作地图上下文 mapContext,例如在地图上显示一些标记点。我把 mapContext 的初始化放在了 onMounted 生命周期函数中,实际运行后发现,在真机中监听到组件属性值发生变化后,调用 mapContext.addMarkers() 报错,打印 mapContext 发现为 null

2 引发原因

watch 监听到组件属性值发生变化时,mapContext 尚未初始化完成。

3 解决方法

借助 Promise 实现每次调用 mapContext 前都确保 mapContext 已初始化完成。

<script setup>
// 地图上下文
let mapContext = nullonMounted(() => {// 获取地图上下文const query = uni.createSelectorQuery().in(instance.proxy)query.select('#customMap').context(({ context }) => {// console.log('地图上下文', context)mapContext = context}).exec()
})/*** 确保地图上下文初始化完成*/
const ensureMapContext = () => {return new Promise((resolve, reject) => {if (mapContext) {resolve(mapContext)} else {// 如果未初始化完成,则设置一个轮询const checkInterval = setInterval(() => {if (mapContext) {clearInterval(checkInterval)resolve(mapContext)}}, 100) // 每隔100ms检查一次// 设置一个超时,防止无限等待setTimeout(() => {if (!mapContext) {clearInterval(checkInterval)reject(new Error('地图上下文初始化超时'))}}, 3000) // 超时3秒}})
}const props = defineProps({a: {type: Number,default: 0}
})watch(() => props.a,(newValue) => {ensureMapContext().then(mapContext => {mapContext.moveToLocation()}).catch(err => {console.log('ensureMapContext error', err)})}
)
</script>

http://www.mrgr.cn/news/58253.html

相关文章:

  • 常用环境部署(二十二)——MySQL的数据库迁移到另一个机器上
  • u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法
  • 第二章:信息建模:对象和变量的类型4
  • 基于深度学习的图像修复系统设计与实现(PyQt5、CodeFormer ffhq-dataset数据集)
  • 为什么会配置足够打LOL等网游很卡?12代大小核处理器最典型
  • gitlab不同账号间·仓库转移
  • 软物质流变探究:从宏观微观差异,到水凝胶界面特性
  • 【算法系列-二叉树】二叉树遍历系列(递归+迭代)
  • 钰泰ETA4553电压电平转换器IC
  • 网络安全行业10大副业汇总,总有一个适合你
  • libevent源码剖析-evconnlistener
  • 不是网吧去不起,而是云电脑更具性价比
  • 筋膜枪哪个品牌最好性价比最高?倍益康M2 Pro Max,航天科技助力全家按摩体验
  • STM32--I2C通信
  • 轻松拿下offer,一次真实的面试回答记录
  • 最强开源大模型面世:阿里发布Qwen2
  • LINUX设备可以上网,但是外部设备连接linux设备之后,外部设备无法上网
  • 新版本发布丨向企业级实时计算平台迈进!支持存算分离、FICC 函数库大更新!
  • DDD系列 - 番外篇1 记一些常用的架构设计原则
  • ReentrantReadWriteLock底层实现原理?
  • vue3中ref和reactive的用法,区别和优缺点,以及使用场景
  • FMEA 系统在医疗设备行业的重要性与创新_SunFMEA
  • 漏洞挖掘 | 记一次逻辑漏洞修改任意用户密码
  • 【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)
  • CSS简介
  • 气膜建筑:突破传统建筑的优势—轻空间