vue3二次封装elementPlus的dialog弹窗组件

1、在components目录下新建一个弹窗.vue文件,我这里是demoDialog.vue。

~template:

<template>
  <div>
    <el-dialog title="标题" v-model="visible" with="600px">
        <div class="dialog-content">我是弹窗</div>
        <template #footer>
            <div class="dialog-footer">
                <el-button @click="handleCancel">取消</el-button>
                <el-button @click="handleConfirm">确认</el-button>
            </div>
        </template>
    </el-dialog>
  </div>
</template>

~js:

<script setup>
import { ref, reactive } from 'vue'

/**
 *  1.只暴露提供一个入口函数————openDialog(),保持组件内部封闭性
 *  2.数据交互尽量通过 openDialog() 方法来传递,减少外部状态依赖,固定的配置项参数才考虑用 props
 */

const emit = defineEmits(['confirm'])
let visible = ref(false)
// 打开弹窗 -- 可通过接收参数data来展示父组件的数据
const openDialog = (data) => {
    visible.value = true
    console.log('data:', data);
}
// 提交
const handleConfirm = () => {
    emit('confirm', '我是传给父组件的数据222')
    visible.value = false
}
// 关闭
const handleCancel = () => {
    visible.value = false
}
// 暴露给父组件
defineExpose({
    openDialog
})

</script>

 2、调用弹窗的父组件中引入并使用:

import demoDialog from '@/components/demoDialog.vue'

 ~template:

  <!-- 弹窗组件 -->
  <div>调用弹窗</div>
  <el-button type="primary" @click="openDemoDialog">打开弹窗</el-button>
  <demoDialog ref="demoDialogRef" @confirm="handleOnConfirm"></demoDialog>

~js:

/**
 * 3、弹窗组件
 * 数据交互尽量通过 openDialog() 方法来传递,减少外部状态依赖,固定的配置项参数才考虑用 props
 */

let demoDialogRef = ref()
// 通过ref调用子组件的方法
const openDemoDialog = () => {
  // 可以通过openDialog方法向弹窗内部传递参数,如弹窗要展示的数据
  demoDialogRef.value.openDialog({data:{name: '小白很白'}})
}
// 在弹窗里点击提交
const handleOnConfirm = (data) => {
  console.log('data', data);
}

 3、效果:

点击打开弹窗,可以看到弹窗打开了,并且能获取到父组件传过去的数据data:

在弹窗里点击确认提交,弹窗关闭,并且把数据提交给父组件:

 

4、总结:

        01、只暴露提供一个入口函数————openDialog(),保持组件内部封闭性;

        02、数据交互尽量通过 openDialog() 方法来传递,减少外部状态依赖,固定的配置项参数才考虑用 props。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值