Vue引入高德地图自定义信息窗体绑定点击事件无效解决方案

你们好,我是金金金。

场景

笔者用的Vue3,引入了高德地图,version2.0,场景如下:

  • 在地图上根据经纬度度打点标记了一个位置,然后点击点标记弹出自定义信息窗体,右上角关闭按钮则是绑定了关闭自定义信息窗体的事件,当点击时:
  • 报错:closeInfo is not defined

排查

贴一下相关代码

  • 关闭自定义信息窗体的方法
  • 关闭按钮绑定的事件

可以看到关闭按钮是绑定了closeInfo这个函数的,那为什么报错closeInfo未定义呢?细心的小伙伴肯定也发现了为什么这里不是@click而是用onclick绑定事件呢

造成error的原因

  1. 为什么是用onclick而不能用@click

    • 原因是这些元素是作为字符串插入到 DOM 树中的,因此 Vue 的事件系统无法捕捉到它们并为其绑定事件处理器。在这种情况下,应该使用原生的 onclick 属性来添加事件监听器。

      Vue 在编译模板时,会自动为带有 v-on:click@click 的元素添加事件监听器。但是,这种机制依赖于 Vue 在渲染组件时能够控制和操作 DOM 元素。当直接在模板字符串中插入一个元素,并且这个元素需要绑定一个事件时,由于它是动态插入的,Vue 可能没有机会去处理这个元素的事件绑定,所以需要使用原生的 onclick 事件属性来绑定事件处理函数。这种方法不需要 Vue 处理,可以直接在 HTML 字符串中使用

  2. 为什么会报错closeInfo未定义呢?

    • closeInfo 方法是在 Vue 组件的 methods 中定义的,那么它默认只能在 Vue 组件管理的 DOM 元素中被调用。这也就是为什么会报错未定义的原因,如果直接在 HTML 字符串中使用 onclick 来绑定事件,那么这个方法需要被定义在全局作用域内。

解决

既然知道了函数报错未定义的原因是因为作用域相关的问题,把closeInfo挂载到window上,点击时就可以在原型链中找到该函数,我这里在钩子函数中将其挂载到window

测试

无报错,事件也能正常触发,和预期结果一致,自定义信息窗体被关闭

总结

重点就是涉及到一些原生知识,由于是直接在字符串里面插入的元素,所以脱离了Vue的一些控制,细心点也是很好解决的~

  • 编写有误还请大佬指正,万分感谢。
相关推荐
QQ1__8115175156 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态6 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子6 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室6 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI6 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing7 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者7 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册7 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
AI老李7 小时前
2026 年 Web 前端开发的 8 个趋势!
前端
里欧跑得慢7 小时前
15. Web可访问性最佳实践:让每个用户都能平等访问
前端·css·flutter·web