下面是一个简单的vue3 + element plus 二次封装弹框组件的示例:

<template>
  <el-dialog :visible.sync="visible" :title="title" :width="width" :before-close="beforeClose">
    <slot></slot>
    <div slot="footer">
      <el-button @click="cancel">取消</el-button>
      <el-button type="primary" @click="confirm">确定</el-button>
    </div>
  </el-dialog>
</template>

<script>
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'MyDialog',
  props: {
    visible: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    width: {
      type: String,
      default: '50%',
    },
  },
  methods: {
    beforeClose(done) {
      this.$confirm('确定关闭此窗口?')
        .then(() => {
          done()
        })
        .catch(() => {})
    },
    cancel() {
      this.$emit('update:visible', false)
    },
    confirm() {
      this.$emit('update:visible', false)
      this.$emit('confirm')
    },
  },
})
</script>

使用示例:

<template>
  <div>
    <el-button @click="showDialog">打开弹框</el-button>
    <my-dialog :visible.sync="dialogVisible" :title="dialogTitle" @confirm="handleConfirm">
      <el-form>
        <el-form-item label="姓名">
          <el-input v-model="name" />
        </el-form-item>
        <el-form-item label="年龄">
          <el-input v-model.number="age" type="number" />
        </el-form-item>
      </el-form>
    </my-dialog>
  </div>
</template>

<script>
import { defineComponent, ref } from 'vue'
import MyDialog from './MyDialog.vue'

export default defineComponent({
  components: {
    MyDialog,
  },
  setup() {
    const dialogVisible = ref(false)
    const dialogTitle = ref('编辑信息')
    const name = ref('')
    const age = ref(0)

    const showDialog = () => {
      dialogVisible.value = true
    }

    const handleConfirm = () => {
      console.log(`姓名:${name.value},年龄:${age.value}`)
    }

    return {
      dialogVisible,
      dialogTitle,
      name,
      age,
      showDialog,
      handleConfirm,
    }
  },
})
</script>
vue3 + element plus 二次封装弹框组件

原文地址: https://www.cveoy.top/t/topic/b976 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录