mapbox的popup里使用vue组件

贴个群号

WebGIS学习交流群461555818,欢迎大家。

问题

在mapbox官网中,他的popup实例是这样的

var popup = new mapboxgl.Popup({offset: popupOffsets, className: 'my-class'})
  .setLngLat(e.lngLat)
  .setHTML("<h1>Hello World!</h1>")
  .setMaxWidth("300px")
  .addTo(map);

可以看到他的popup里面的内容,只能是原生的html,那些标签是可以写style的,是可以影响他的。

class是不会生效的,除非将class写在APP.Vue里面。

但是如果我们想要每个图层都添加一种popup,而且图层数量很多,显示内容不同的话,这样硬写不是可取的,还是应该使用vue组件,只不过要把vue组件包在这个popup里面。

操作

要注意的是,直接将组件和上面例子一样写在里面是没用的,他只支持原生的html,说白了,他的popup加载的方式,是mapbox添加到dom的,并不是vue编译进去的。

如果您尝试在弹出内容中使用Vue指令,则弹出窗口可能会有些棘手

下面是我的操作,先引入组件,注意要引入vue实例

import Vue from 'vue'

import BaseDetail from '@/views/detailData/BaseDetail.vue' //我想要塞进popup里面的一个组件,该组件负责展示一下点的详细信息
const BaseDetailItem = Vue.extend(BaseDetail) // 利用vue.extend 生成一个该组件的构造器

然后在调用处,给他一个唯一的id

popupHTML = '<div id="base-detail"></div>'      //这里是我们的popup内容,注意这里面只放一个有id的div

然后我们生成popup

 this.popup
   .setLngLat(lngLat)
   .setHTML(popupHTML)
   .setMaxWidth('none')
   .addTo(this.map)

然后将组件内容挂载到这个id下面,相当于利用这个组件替换了上面有这个id的div内容

  new BaseDetailItem({
    propsData: {
      detailId: this.detailId
    }
  }).$mount('#base-detail')

这里需要注意,propsData是关键字应该,不是我要传下去的值,我要传下去的值是detailId,在组件内接收的也是detailId,组件内部是这样只接收了这个detailId,这个你们自己想要接收什么就接受什么,我这里只是我的演示

  props: ['detailId'],

成果

可以看到,我已经成功的将我的vue组件,搞在了这个mapbox的popup内容里面去了
在这里插入图片描述

参考网站

https://tech.beyondtracks.com/posts/mapbox-gl-popups-with-vue/
https://github.com/phegman/vue-mapbox-gl#popups

Mapboxpopup是用于在地图上显示弹窗的功能。根据官方示例,首先需要引入mapbox的样式文件,可以使用以下代码导入样式文件: import "mapbox-gl/dist/mapbox-gl.css" 然后,可以创建一个popup对象并将其添加到地图上,示例代码如下: var popup = new mapboxgl.Popup().addTo(map); 接下来,可以使用popup对象的相关方法来操作弹窗,比如移除弹窗可以使用popup.remove()方法。 要注意的是,这只是mapbox popup的简单使用示例,实际使用中可以根据需要设置弹窗的内容、样式和交互行为等。可以参考mapbox官方文档和示例来了解更多关于popup的详细用法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mapbox 添加弹窗 点击标记点出现弹窗 vue](https://blog.csdn.net/Windyluna/article/details/120658613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Mapbox 移除弹窗、监听弹窗打开、关闭事件、去除Mapbox的logo](https://blog.csdn.net/Windyluna/article/details/120827636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值