uniapp的map组件@callouttap如何使用

在uniapp中使用map组件的@callouttap事件时遇到了问题,点击标注的弹窗没有任何反应。我已经按照文档在组件上添加了@callouttap="handleCalloutTap"方法,并在methods里定义了对应的函数,但点击标注弹窗时函数没有被触发。请问这个事件具体该怎么使用?是否需要额外的配置才能生效?

2 回复

在uniapp的map组件中,@callouttap是点击标注点气泡时触发的事件。用法:

<map [@callouttap](/user/callouttap)="handleCalloutTap">
  <marker id="1" callout="..." />
</map>
methods: {
  handleCalloutTap(e) {
    console.log(e.markerId) // 获取被点击的marker的id
  }
}

点击marker的气泡时会触发,通过e.markerId获取对应marker的id。


在 UniApp 中,map 组件的 @callouttap 事件用于响应用户点击地图上的**标注点气泡(callout)**时的操作。当用户点击标注点上的气泡(通常是自定义信息窗口)时,会触发该事件,并返回相关数据。

使用方法

  1. map 组件中绑定 @callouttap 事件

    <template>
      <view>
        <map
          :latitude="latitude"
          :longitude="longitude"
          :markers="markers"
          @callouttap="onCalloutTap"
        ></map>
      </view>
    </template>
    
  2. 在 JavaScript 中定义事件处理函数

    export default {
      data() {
        return {
          latitude: 39.909,
          longitude: 116.39742,
          markers: [
            {
              id: 1,
              latitude: 39.909,
              longitude: 116.39742,
              title: "位置标题",
              callout: {
                content: "点击查看详情", // 气泡内容
                display: "ALWAYS" // 始终显示气泡
              }
            }
          ]
        };
      },
      methods: {
        onCalloutTap(e) {
          // 获取被点击的标注点信息
          const markerId = e.markerId;
          console.log("点击的气泡对应标注点 ID:", markerId);
          
          // 根据 markerId 执行自定义逻辑,例如跳转页面或显示详情
          uni.showToast({
            title: `点击了标注点 ${markerId}`,
            icon: "none"
          });
        }
      }
    };
    

参数说明

  • 事件对象 e 包含 markerId,即被点击气泡所属标注点的 ID。
  • 通过 markerId 可关联到 markers 数组中的具体标注点数据,实现交互逻辑(如跳转详情页、弹窗等)。

注意事项

  • 确保 markers 配置了 callout 属性且 display 不为 "BYCLICK"(否则需先点击标注点才显示气泡)。
  • 仅支持点击气泡触发,点击标注点图标本身需使用 @markertap 事件。

通过以上步骤即可实现 @callouttap 的交互功能。

回到顶部