【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 !]

相关推荐
Hi_kenyon10 分钟前
Ref和Reactive都是什么时候使用?
前端·javascript·vue.js
止观止30 分钟前
深入理解 interface vs type:终结之争
前端·typescript
css趣多多41 分钟前
vue环境变量
前端
RFCEO42 分钟前
前端编程 课程十五、:CSS核心基础3:文字+段落样式
前端·css·文字+段落样式·css文本样式·美化页面文本内容·演示动画说明·单行文字垂直居中技
摇滚侠42 分钟前
【程序员入门系列】jQuery 零基础入门到精通!Jquery 选择器 API
前端·javascript·jquery
im_AMBER43 分钟前
Leetcode 111 两数相加
javascript·笔记·学习·算法·leetcode
源力祁老师1 小时前
深入解析 Odoo 中 default_get 方法的功能
java·服务器·前端
sleeppingfrog2 小时前
zebra打印机实现前端打印
前端
摇滚侠2 小时前
前端判断不等于 undefined 不等于 null 的方法
前端
DFT计算杂谈2 小时前
VASP+Wannier90 计算位移电流和二次谐波SHG
java·服务器·前端·python·算法