You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3中如何显示Google Maps的AdvancedMarkerElement

Vue3中Google Maps AdvancedMarkerElement不显示的解决办法

排查及修复点:

  • 标记位置不在当前地图视野
    你的代码里地图中心设置为{ lat: 9.3622369, lng: 3.3455534 },但标记位置是{ lat: -25.344, lng: 131.031 },两者跨越大半个地球,当前缩放级别7下完全看不到标记。可以:

    • 将标记位置改为地图中心附近,快速验证显示效果;
    • 调用map.value.panTo(标记位置),让地图自动移动到标记所在区域。
  • 未保留标记实例引用
    AdvancedMarkerElement基于Custom Element实现,若直接new后不保存引用,可能被浏览器垃圾回收或Vue响应式系统处理掉。需用ref变量保存标记实例。

  • 无效mapId导致渲染失败
    AdvancedMarkerElement依赖Map ID关联的地图样式,若你的mapId未在Google Cloud控制台正确配置,会导致标记无法渲染。可先注释掉mapId配置,使用默认样式验证。

  • 地图容器缺少宽高样式
    必须给地图容器设置明确的宽高(如width:100%;height:500px),否则地图本身无法显示。

修正后的完整代码

<script>
import { Loader } from "@googlemaps/js-api-loader";
import { onMounted, ref } from "vue";

const GOOGLE_MAPS_API_KEY = "my_key";

export default {
  setup() {
    const loader = new Loader({
      apiKey: GOOGLE_MAPS_API_KEY,
      version: 'beta',
    });

    const mapDiv = ref(null);
    const map = ref(null);
    const marker = ref(null); // 保存标记实例,避免被回收

    onMounted(async () => {
      const { Map } = await loader.importLibrary("maps");
      const { AdvancedMarkerElement } = await loader.importLibrary("marker");

      map.value = new Map(mapDiv.value, {
        center: { lat: 9.3622369, lng: 3.3455534 },
        zoom: 7,
        // mapId:"map_id" // 先注释,确认是否为该问题
      });

      // 创建标记并保存引用
      marker.value = new AdvancedMarkerElement({
        map: map.value,
        position: { lat: 9.3622369, lng: 3.3455534 }, // 与地图中心一致,确保可见
        title: "Uluru",
      });

      // 若要使用原标记位置,打开下面一行
      // map.value.panTo({ lat: -25.344, lng: 131.031 });
    });
    return { mapDiv };
  },
};
</script>

<template>
  <div ref="mapDiv" style="width: 100%; height: 500px;"></div>
</template>

内容的提问来源于stack exchange,提问作者Rostand KPO-N-MEY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:22:08