Vue-baidu-map 动态刷新地图的方法

文章介绍了在Vue中使用vue-baidu-map组件时如何实现地图的动态刷新,特别是当需要动态标注点位时。作者通过添加v-if开关和监听points数组变化来控制地图刷新,避免了直接调用handler方法导致的错误。同时,文章提到了使用遮罩层改善地图加载体验的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  • vue-baidu-map 是没有官方的刷新方法的,如果要在某个功能上实现刷新地图,我们可以使用v-if加开关思想加上侦听器,侦听这个标注数组来控制开关刷新

  • 比如我们是在地图上动态标注点位,点位是v-for,当便利的数组有数据就可以刷新地图,就可以实现标注。

  • 刚开始我是直接调用<baidu-map>的handler ()方法,也可以实现标注,但是会因为没有实例对象报错。

  • 我的实际情况是点标注,在后续获取到故障信息的点位信息后,在地图给他按钮动态标注出来。

  • 在网上查找了很多办法,也没有详细的解决方案,困扰了很久,在这里总结一下

具体实现

1.地图添加一个v-if 开关控制加载 点标注是v-for points数组

 <baidu-map
          v-if="hackReset"
          :center="center"
          :zoom="zoom"
          @ready="handler"
          class="baidu-map"
        >
          <!-- 标注 -->
          <div v-for="(item, k) in points" :key="k">
            <bm-marker
              :position="{ lng: item.lng, lat: item.lat }"
              :icon="{ url: item.txt, size: { width: 28, height: 30 } }"
              :title="item.title"
              @mouseover="infoWindowOpen(k)"
              @mouseout="infoWindowClose(k)"
            >
              <bm-info-window
                title="设备信息"
                :position="{ lng: item.lng, lat: item.lat }"
                :show="item.show"
              >
                <p v-text="item.poinser"></p>
                {{ item.poinser }}
              </bm-info-window>
            </bm-marker>
          </div>
        </baidu-map>
  1. data 写一个hackReset变量控制地图开关默认开

 // 百度地图刷新开关
 hackReset: true,
  1. points数组数据格式

this.points = [
        {
          lng: 119.27976095105356,
          lat: 26.11161188133426,
          show: false,
          txt: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAkdJREFUWEftlb1rFFEUxX83uyhYa/APsJBY+BEICIEomGZZNI02aQRxdSasYqPlGhtLwSFvVmwskkYLPxpLDWgjotgIEkFLIWgvYq7M29klO7M7bzKzIQiZbt7Hveedc++5wg5/ssP52QUwkAG9yqntkEbavE7GTQFQn9tAazsAAItibPzeN7QGLAtCS0JOlwGjHq8QVpOJuzH/DwBWFmUmRm0k5EnutVEwoE0m+MN4BKBbSLnXCgNocpS/rKJclJBnRepAPeYQHlFhRgI+DYqRaUTq4wOXxXC8EACfj8BDMZhh951OqD4vgA+ARgpsCpT8H5TjhBjOZoHPA+AQMJ9Ink1IVLBiTWdFDF9LAYguq8d5hCPDejmZwPY+2G5xSedkwALouCNbApBhPrmccPMh64pj9lWLrhfF+y0x+SZtLgZiGc4gTOcEsOzS3mnFKV3jCZmcaBE7qbUG+9nLuAR8dgHOxYB6NBjjJnuYknv86gZVn7soExJyrk8yh/ttvQYiQxHuyBJPe8mjV1ZZRzksIV9663G9jLQG1OMnyqS0+Z5MxAbT0ubtAGA1CXk5Ggl8loE1Mf1doAs8YIODKQk6bTtPlZrcZ628EXVmQl0MtYTWkwjvqXAsOWzU5wZQo0JdAn4XngW2BTN0zTIp64hVbknAu3IAfB4j/JAlrvUx0GAfVd4Az5PyxA76DZjN8gRnG8ZUnhTDhZQ3+FwCrohhKrW3wCzKdTHUS9dAVgBtckAC1l3VXkqCosHz3HNKkCdImTO7AP4B4VzbIYTL744AAAAASUVORK5CYII=',
          title: '烟感一',
          poinser: '位于2楼会议室烟感报警了'
        },
        {
          lng: 119.2801137156272,
          lat: 26.109890462480518,
          show: false,
          txt:                            'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAcZJREFUWEftlzFIHEEUhr93ghYSEcFCsRFCitNCDCZgZVp7rxO0i7sIWmgliGClhYFw43VKqhBrCyttBEHs1MLK6iyENEcKBe/JjrPeHkLcvdtDi53mlgfzv2/+/80uJ7zxkjfuTx2ALtDHPSso+ZaACZe0sy4/uAn16wG+M0GOw5Y0D0WrfJMSRxlAHAfWqNasaiqWHBPAqtWIG4GY+gFtBkCjs5UBxHWAKoNS4roZ68O9DUWAcIBykgYAMAZMJhrClBq/lIkdgbAsRTYDBfWZRvkF7ImhYGvz5HlgP3IqG5d6/AGmotdNfZZQNpI5oBRkmz0rWrtGRgz+c7Ye58GzGIYjtSLg0caQ/OTS7p9jCrFg8d8DwC3Khd0kjAJdCP+ocupqA8BH1/gC5dY+5xhD6QSuUTfEwhDQmxSgjHLlmo0A3UAF5czVAsFAOFhnKBVX/wx8AK5Qyq72CehPCuCLwbhcx4FjYFcMs69EsAPMAF/EPLmlHh4QRJMogihAIBgIPwOoz1eU3w6mEGn2BBCZ9kYBwoOm+xv7GqbbtqaWAWQOZA5kDvzXgUV6uGMXtR+T9JdQoYMZ2eJvKP6+/pymf+TXFR8B10ADMBO6FewAAAAASUVORK5CYII=',
          title: '烟感二',
          poinser: '位于2楼会议室烟感报警了'
        }
      ]

4.利用侦听器,侦听标注数组points变化,调接口有数据就是有需要标注信息,就控制地图开关刷新

 watch: {
    points: {
      handler(newValue, oldValue) {
        console.log('百度地图更新了')
        this.hackReset = false
        //遮罩层开关 可有可不有
        this.loadinge = false
        this.$nextTick(() => {
          this.hackReset = true
        })
      }
    }
  },

注意:这里有一个遮罩层开关,是默认开,地图加载完毕就关掉了。因为地图加载有白屏现象,用户体验不好,所以有一个遮罩层。主页文章有。我们通过按钮点击调接口,查询标注点数组数据,利用侦听器侦听数组,有数据就是需要标注。


总结:

经过这一趟流程下来相信你也对 ue-baidu-map 动态刷新地图的方法 有了初步的深刻印象,但在实际开发中我们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

什么不足的地方请大家指出谢谢 -- 風过无痕

Vue3-BaiduMap-Gl是一个基于Vue.js的百度地图高德组件封装,它允许你在Vue项目中集成高德地图,并支持加载特定城市的地图数据。如果你想加载指定城市的数据,你可以按照以下步骤操作: 1. 首先,在你的Vue项目中安装`vue3-baidu-map-gl`库: ```bash npm install vue3-baidu-map-gl ``` 2. 然后,在`main.js`或其他适当的地方引入并注册组件: ```javascript import BaiduMapGL from 'vue3-baidu-map-gl'; Vue.component('baidumapgl', BaiduMapGL); ``` 3. 在你的组件模板中,使用BaiduMapGl组件,并设置初始化选项,包括城市信息: ```html <baidumapgl :center="mapCenter" :zoom="zoomLevel" :city="selectedCity"> <!-- ...其他配置... --> </baidumapgl> ``` 其中,`mapCenter`和`zoomLevel`是地图中心点和缩放级别,`selectedCity`是你需要加载的城市名称。 4. 定义数据来存储城市信息,例如: ```javascript export default { data() { return { mapCenter: { latitude: ..., longitude: ... }, // 初始化中心点坐标 zoomLevel: ..., // 初始化缩放级别 selectedCity: '北京', // 指定你想要加载的城市名 }; }, // ...其他生命周期钩子和计算属性 } ``` 5. 如果需要动态切换城市,可以在组件内添加事件监听或方法来更新`selectedCity`值: ```javascript methods: { loadCity(cityName) { this.selectedCity = cityName; // 可能需要更新地图数据或者触发地图刷新 } }, // 使用时调用loadCity方法 <button @click="loadCity('上海')">加载上海地图</button> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-風过无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值