请你用vue3+element-plus+ts二次封装一个el-dialog
时间: 2023-06-27 15:06:46 浏览: 666
vue3 + element plus + ts , 饿了么对话框组件二次封装
好的,我可以为你提供一个基本的ElDialog封装,供你参考:
```vue
<template>
<el-dialog
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose"
:close-on-click-modal="false"
:custom-class="customClass"
:width="width"
:lock-scroll="lockScroll"
:modal-append-to-body="modalAppendToBody"
:destroy-on-close="destroyOnClose"
:center="center"
@opened="handleOpen"
@closed="handleClosed"
v-bind="$attrs"
v-on="$listeners"
>
<slot></slot>
</el-dialog>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { ElDialog } from 'element-plus';
export default defineComponent({
name: 'MyDialog',
props: {
title: {
type: String,
default: '',
},
dialogVisible: {
type: Boolean,
default: false,
},
customClass: {
type: String,
default: '',
},
width: {
type: String,
default: '50%',
},
lockScroll: {
type: Boolean,
default: true,
},
modalAppendToBody: {
type: Boolean,
default: true,
},
destroyOnClose: {
type: Boolean,
default: false,
},
center: {
type: Boolean,
default: true,
},
},
emits: ['update:dialogVisible', 'opened', 'closed'],
methods: {
handleClose(done: () => void) {
// 自定义关闭操作
done();
},
handleOpen() {
this.$emit('opened');
},
handleClosed() {
this.$emit('closed');
},
},
components: {
ElDialog,
},
});
</script>
```
这里我们使用了Vue3的Composition API,使用`defineComponent`定义了一个组件,并引入了Element Plus的ElDialog组件。
我们将ElDialog组件的属性和事件通过props和emits暴露出来,并在组件内部进行了一些自定义操作,如自定义关闭操作和自定义事件触发。
你可以根据自己的需求对组件进行进一步封装和定制化。
阅读全文