vue 自定义modal 模态框组件
参数名 | 类型 | 说明 |
---|---|---|
visible | Boolean | 是否显示,默认false |
title | String | 标题 |
update:visible | Boolean | 更新visible, 使用:visible.sync 实现动态绑定 |
Modal.vue
<template>
<transition name="fade">
<div class="modal-wrap" v-if="visible">
<div class="modal">
<div class="hd">
{{title}}
<i class="btn-close iconfont icon-close" @click="close"></i>
</div>
<div class="bd">
<slot name="content"></slot>
</div>
<slot name="ft">
<!--<div class="ft" slot="ft">
<a href="javscript:void(0)" class="btn make-sure" @click="sure">确定</a>
<a href="javscript:void(0)" class="btn cancel" @click="close">取消</a>
</div>-->
</slot>
</div>
<div class="backdrop" @click="close"></div>
</div>
</transition>
</template>
<script>
export default {
name: "MyModal",
props: {
visible: {
type: Boolean,
default: false,
required: true,
},
title: {
type: String,
default: '',
}
},
watch:{
visible:function(curVal) {
if(curVal&&document.body.scrollHeight > window.innerHeight){
$('body').addClass('backdrop-open')
}else{
$('body').removeClass('backdrop-open');
}
}
},
methods: {
close() {
this.$emit('update:visible', false)
},
}
}
</script>
index.js
import Modal from './Modal.vue'
Modal.install=function(Vue){
Vue.component(Modal.name,Modal)
}
export default Modal
main.js
import Modal from '@/components/common/modal'
Vue.use(Modal)
页面调用
<my-modal title="消息" :visible.sync="isVisible">
<div slot="content">
内容
</div>
<div slot="ft" class="ft">
<a class="btn btn-primary" @click="sure">确定</a>
<a class="btn btn-default" @click="isVisible=false">取消</a>
</div>
</my-modal>
效果图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!