LeafLet开源GIS框架Popup添加VUE子组件的解决方案

前言:

        最近在做可交互的瓦片地图,其中包括点击地图上的marker可以弹出popup,通常会采用html拼接的形式来绘制弹出的popup框,但这种方式不太利于后期维护,于是想到能否使用VUE组件设计好popup组件,再加载进来。

开发环境:

        VUE 3.3.4

        element-plus 2.3.14

        leaflet 1.9.4

实现方式:

        1. 定义子组件

        此处定义的子组件名称为:PopupAnchor.vue


<template>
    <div>
        <el-card class="box-card p-0" shadow="hover" body-style="padding: 0px">
            <div>示例</div>
        </el-card>

    </div>
</template>

        2.加载子组件

  <template>
    <div>
       <!-- 此处省略LeafLet地图相关实现 -->

       <!-- 载入Popup组件 -->
      <PopupAnchor :id="popupAnchor.ID" :anchor="popupAnchor" :testData="testData" />
    </div>
</template>
import PopupAnchor from '~/pages/map/components/PopupAnchor.vue';

        3.将组件绑定到marker上,并监听click事件

        在onMounted钩子函数中写入以下逻辑

        // 获取加载好的popupAnchor组件
        const element = document.getElementById(popupAnchor.value.ID);

        // 定义marker,传入坐标值
        var m1 = L.marker([item.PosX, item.PosY]).addTo(map)
        // 绑定popupAnchor组件
        m1.bindPopup(element);

        // 监听click事件
        m1.on('click', function () {
            // 打开Popup
            m1.openPopup();
        });

效果:

总结:

        以上方法采用的是让VUE预先渲染,随后将渲染好的组件绑定到marker上,在marker被点击后,该组件就会显示。

        由于是VUE预先渲染好组件,因此也可以支持element-ui(之前我用vue的h函数做的时候发现无法正常的进行element-ui渲染)

        实际业务中,每个marker都有自己的相关信息,可以在marker的click事件触发的时候先对组件的数据进行更新,然后再openPopup()。

前期参考:

采用html拼接的方式 ↓ ↓ ↓

艾尔登法环地图-艾尔登法环全BOSS位置-艾尔登法环地图工具

塞尔达传说:旷野之息

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值