vue3百度地图的点点击事件弹出自定义组件当弹窗

百度地图上面有自定义的点事件,但是呢很不方便,就只能显示自己写的html固定的,泰拉跨辣!!!

百度地图api是这么搞的:

var opts = {
    width: 200,
    height: 100,
    title: '故宫博物院'
};
var infoWindow = new BMapGL.InfoWindow('地址:北京市东城区王府井大街88号乐天银泰百货八层', opts);
// 点标记添加点击事件
marker.addEventListener('click', function () {
    map.openInfoWindow(infoWindow, point); // 开启信息窗口
});

运行出来是这样的:

 需求是点击点标记弹出弹窗,里面有视频啊图像啊之类的,所以这api上面就不可行,怎么办呢?

自己写一个组件,点击的时候就弹出来我写的组件,想写啥就直接塞进去,多方便啊,我是这样写的:

父页面:

<!-- 地图 -->
		<div style="height: 100%" id="allmap">
		</div>
		<editDialog ref="editDialogRef" :TipTitle="TipTitle"/>

引入子组件(别在意我子组件叫啥哈哈哈哈):

import editDialog from '/@/views/visualizing/editDialog.vue';

对ref的值设置:

const editDialogRef = ref()

触发的click函数:

const openeditDialog = () => {
	editDialogRef.value.openDialog(mac.value);
};

在百度地图上触发click事件:

marker1.addEventListener('click', function () {
			openeditDialog()
		})

自定义组件的内容(项目不能对外,我就把子组件的内容换成了一个div,如果有报错,就直接把报错的地方删了就行,并不影响) :

<template>
	<div class="tbwea-container">
		<el-dialog v-model="isShowDialog" :width="500" draggable="" :title='TipTitle'>
			<div>我是子组件</div>
			<template #footer>
				<span class="dialog-footer">
					<el-button @click="cancel" size="default">取 消</el-button>
					<el-button type="primary" size="default">确 定</el-button>
				</span>
			</template>
		</el-dialog>
	</div>
</template>

<script lang="ts" setup>
import { ref, onMounted,reactive } from "vue";
import type { FormRules } from "element-plus";
import { pageTbImageinfo } from '/@/api/main/tbImageinfo';
import { useRouter } from 'vue-router';
const router = useRouter()
function tbimageinfo() {
	router.push({ path: '/Img/tbimageinfo', query: { mid: "sp0006" }})
}
const isShowDialog = ref(false);
const ruleForm = ref<any>({});
const getpictureWebURL = ref();
const TipTitle = ref()
//自行添加其他规则
const rules = ref<FormRules>({
});
const queryParams = ref<any>({});
const state = reactive({
	loading: false,
	
	
	queryParams: {
		mid: '',
		account: undefined,
		realName: undefined,
		phone: undefined,
	},
	tableParams: {
		page: ref(1),
		pageSize: ref(10),
		total: 0 as any,
	},
	editUserTitle: '',
});
// 打开弹窗
const openDialog = (row: any) => {
	ruleForm.value = JSON.parse(JSON.stringify(row));
	isShowDialog.value = true;
	queryParams.value = ruleForm.value.mid
	TipTitle.value = ruleForm.value.name
	pageTbImageinfo({mid:(Object.assign(queryParams.value))}).then(res => {
	const data = res.data.result.items
	for (let i = 0; i < data.length; i++) {
		const element = data[i];
		getpictureWebURL.value = element.pictureWebURL;
	}
})
};

// 关闭弹窗
const closeDialog = () => {
	isShowDialog.value = false;
};
// 取消
const cancel = () => {
	isShowDialog.value = false;
};
// 页面加载时
onMounted(async () => {

});
//将属性或者函数暴露给父组件
defineExpose({ openDialog });
</script>




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3 中,你可以使用 `Teleport` 组件来实现弹窗。以下是一个简单的自定义弹窗的示例: 1. 创建一个 `MyDialog.vue` 组件,它包含你想要显示在弹窗中的内容: ```vue <template> <div class="dialog"> <h2>{{ title }}</h2> <p>{{ message }}</p> <button @click="$emit('close')">Close</button> </div> </template> <script> export default { props: { title: String, message: String, }, }; </script> <style scoped> .dialog { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: white; padding: 1rem; border-radius: 0.5rem; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); } </style> ``` 2. 在你的父组件中,使用 `Teleport` 组件来渲染弹窗。当需要显示弹窗时,将 `showDialog` 设置为 `true`: ```vue <template> <div> <button @click="showDialog = true">Show Dialog</button> <teleport to="body"> <my-dialog v-if="showDialog" @close="showDialog = false" title="Title" message="Message" /> </teleport> </div> </template> <script> import MyDialog from './MyDialog.vue'; export default { components: { MyDialog, }, data() { return { showDialog: false, }; }, }; </script> ``` 这里我们使用了 `Teleport` 组件将 `MyDialog` 组件渲染到 `body` 元素中,以确保它能够在其他元素上方弹出。 当用户弹窗中的 "Close" 按钮时,我们触发 `close` 事件并将 `showDialog` 设置为 `false`,以关闭弹窗。 这只是一个简单的示例,你可以根据自己的需要对弹窗进行样式和功能的定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值