【vue+leaflet+elementUI】vue项目中在Leaflet弹框Popup中使用elementui组件(三)

看效果:

leaflet主页面

1.html

javascript 复制代码
<template>
  <div class="imgBox">
    <div id="imageMap"></div>
    <Popup ref="dialogLayer" v-if="isDialog" /> // 组件先隐藏
  </div>
</template>
// import... 初始模块照搬引入
// 引入组件
import Popup from '@/components/imgLayout/popup.vue'
export default {
  components: { Popup },
  data() {
    return {
      map: null,
      bounds: [
        [0, 0],
        [0, 0],
      ],
      isDialog: false, // 是否显示弹窗
      dialogTarget: '', // 弹窗dom
    }
  },
}

2.js

javascript 复制代码
   // 地图初始化,平面图初始化的方法没有改动,照搬之前的就可以
  // 图层绘制完成
    createClick(e) {
      // 绑定图层点击事件
      e.layer.on('click', this.layClick)
      // 弹窗,图层绘制完自动弹窗 参数:(当前图层的layer, 当前图层的中心点的坐标)
      this.dialog(e.layer, e.layer.getBounds().getCenter())
    },
    // 图层点击事件
    layClick(e) {
      // 弹窗, 参数:(当前点击的图层的layer, 点击的坐标)
      this.dialog(e.target, e.latlng)
    },
    // 弹窗事件
    dialog(target, latlng) {
      this.dialogTarget = target // 主要是在弹窗组件中用到
      this.isDialog = true
      this.$nextTick(() => {
        L.popup({ closeOnClick: false, closeButton: false }).setLatLng(latlng).setContent(this.$refs.dialogLayer.$el).openOn(this.map)
        // 修复点击popup模态框时,select下拉列表不消失问题
        let dom = document.getElementsByClassName('leaflet-popup-content-wrapper')[0]
        let _this = this
        dom.onclick = function () {
          _this.$refs.dialogLayer.$refs.selectRef.visible = false
        }
      })
    },

弹窗的子组件 popup.vue

新建一个组件 popup.vue 这个组件里面就没什么要求了,按你的需求来,我这里就随便引入一个select,input,button

html 复制代码
<template>
	<div>
		...
		<div>
	      <span>设备编号:</span>
	      <el-input v-model="devId" placeholder="请输入设备编号"></el-input>
	    </div>
	    <div>
	      <el-button @click="close">关 闭</el-button>
	      <el-button type="primary" @click="confirm">确 定</el-button>
	    </div>
	</div>
</template>
javascript 复制代码
  close() {
      // console.log('关闭弹窗')
      //this.isDialog = false不行 只能调用父元素的popup关闭
      this.$parent.map._popup.close()
    },
  mounted(){
	//popup展开,给当前图层设置样式
	 // this.$parent.dialogTarget.setStyle({
    //   ...
    // })
  }

所有示例代码已上传,点击前往获取 [done !]

相关推荐
星空寻流年19 分钟前
CSS3(BFC)
前端·microsoft·css3
九月TTS20 分钟前
开源分享:TTS-Web-Vue系列:Vue3实现固定顶部与吸顶模式组件
前端·vue.js·开源
H3091936 分钟前
vue3+dhtmlx-gantt实现甘特图展示
android·javascript·甘特图
CodeCraft Studio39 分钟前
数据透视表控件DHTMLX Pivot v2.1发布,新增HTML 模板、增强样式等多个功能
前端·javascript·ui·甘特图
一把年纪学编程42 分钟前
【牛马技巧】word统计每一段的字数接近“字数统计”
前端·数据库·word
llc的足迹1 小时前
el-menu 折叠后小箭头不会消失
前端·javascript·vue.js
九月TTS1 小时前
TTS-Web-Vue系列:移动端侧边栏与响应式布局深度优化
前端·javascript·vue.js
曾经的你d1 小时前
【electron+vue】常见功能之——调用打开/关闭系统软键盘,解决打包后键盘无法关闭问题
vue.js·electron·计算机外设
Johnstons1 小时前
AnaTraf:深度解析网络性能分析(NPM)
前端·网络·安全·web安全·npm·网络流量监控·网络流量分析
whatever who cares2 小时前
CSS3 伪元素(Pseudo-elements)大全
前端·css·css3