vue 封装一个Dialog组件

这篇具有很好参考价值的文章主要介绍了vue 封装一个Dialog组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于element-plus封装一个Dialog组件文章来源地址https://www.toymoban.com/news/detail-707659.html

<template>
    <section class="dialog-wrap">
        <el-dialog 
	        :title="title" 
	        v-model="visible" 
	        :close-on-click-modal="false">
            <section class="content-wrap">
                <Form 
	                :propList="props.propList" 
	                ref="editForm"
	                @close="cancel">
               	</Form>
            </section>
            <template #footer>
                <MyButton @click="cancel">取消</MyButton>
                <MyButton type="primary" @click="confirm">确定</MyButton>
            </template>
        </el-dialog>
    </section>
</template>

<script setup>
import { ref, reactive, toRefs, watch, inject } from 'vue'
import MyButton from '@/components/MyButton.vue';
import Form from '@/components/Form.vue'

const visible = ref(false)

const { title } = inject('formObj')

const propList = ref([
     {
         id: 1,
         type: 'input',
         label: '姓名',
         prop: 'name',
         width: '100%',
         placeholder: '请输入姓名',
         disabled: false,
         show: true,
     },
     {
         id: 2,
         type: 'input',
         label: '用户名',
         prop: 'username',
         width: '100%',
         placeholder: '请输入用户名',
         disabled: false,
         show: true,
     },
     {
         id: 3,
         type: 'input',
         label: '联系电话',
         prop: 'phone',
         width: '100%',
         placeholder: '请输入联系电话',
         disabled: false,
         show: true,

     },
     {
         id: 4,
         type: 'input',
         label: '网址',
         prop: 'website',
         width: '100%',
         placeholder: '请输入网址',
         disabled: true,
         show: true,
     },
     {
         id: 5,
         type: 'input',
         label: '邮箱',
         prop: 'email',
         width: '100%',
         placeholder: '请输入邮箱地址',
         disabled: false,
         show: true,
     }
 ])

const props = defineProps({
    propList: {
        type: Array,
        default: []
    }
    // formData: {
    //     type: Object,
    //     default: () => { }
    // },
    // title: {
    //     type: String,
    //     default: '',
    //     required: true
    // }
})

const editForm = ref()

watch([() => props.formData, () => props.title], ([newFormData, newTitle]) => {
    // if (props.title === '编辑') {
    //     formData.value = newFormData
    // }
})

// const data = reactive({
//     formData: {
//         name: '',
//         username: '',
//         phone: '',
//         website: '',
//         email: ''
//     }
// })

const cancel = () => {
    visible.value = false
    editForm.value.resetForm()
}

// 提交表单
const confirm = async () => {
    editForm.value.formValidate()
}

const openDialog = () => {
    visible.value = true
}

// const { formData } = toRefs(data)

defineExpose({
    openDialog
})

</script>
<style lang="scss" scoped>
.dialog-wrap {
    padding: 5px;
    .content-wrap {
        margin: 5px;
    }
    .footer {
        margin: 5px;
    }
}
</style>

到了这里,关于vue 封装一个Dialog组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Vue2封装一个全局通知组件并发布到NPM

    Vue2封装一个全局通知组件并发布到NPM

    ✍🏼作者:周棋洛,计算机学生 ♉星座:金牛座 🏠主页:点击查看更多 🌐关键: vue2 组件封装 npm发包 你好!我是王子周棋洛,好久没写文了。 今天带大家 封装 一个类似 element-ui 的全局通知组件,并发布到 npm 后安装使用自己封装的组件。go,go,go🎉 原因1:现成UI组件

    2024年02月09日
    浏览(12)
  • vue2封装一个步进器组件number-box

    vue2封装一个步进器组件number-box

    最近做一个商城的项目,商品的详情页和购物车列表都需要用到上面数量增减的功能,其实这个是一个很普通的功能,但是购物车的列表是放到vuex里面的,这里记录使用的差别: 首先封装number-box组件: 在列表页去引用,并使用v-vmode传递数据: 如果数据是直接在data下面,直

    2024年02月04日
    浏览(8)
  • 前端Vue自定义简单实用轮播图封装组件 快速实现轮播图

    前端Vue自定义简单实用轮播图封装组件 快速实现轮播图

    前端Vue自定义简单实用轮播图封装组件 快速实现轮播图, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下: 使用方法 HTML代码实现部分

    2024年02月10日
    浏览(25)
  • 封装一个类似微信通讯录带有字母检索功能的vue组件

    封装一个类似微信通讯录带有字母检索功能的vue组件

    这里我们直接使用 scrollIntoView 方法 该方法将调用它的元素滚动到浏览器窗口的可见区域 element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop); //布尔参数 element.scrollIntoView(scrollIntoViewOptions); //对象参数 分析一下功能就知道很简单了。 首先需要

    2024年02月12日
    浏览(113)
  • 基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十一:通用表单组件封装实现

    基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十一:通用表单组件封装实现

      本章实现通用表单组件,根据实体配置识别实体属性,并自动生成编辑组件,实现对应数据填充、校验及保存等逻辑。 1. 详细课程地址: https://edu.csdn.net/course/detail/38183 2. 源码下载地址: 点击下载

    2024年02月10日
    浏览(19)
  • 基于VUE3+Layui从头搭建通用后台管理系统(前端篇)八:自定义组件封装上

    基于VUE3+Layui从头搭建通用后台管理系统(前端篇)八:自定义组件封装上

      本章实现一些自定义组件的封装,包括数据字典组件的封装、下拉列表组件封装、复选框单选框组件封装、单选框组件封装、文件上传组件封装、级联选择组件封装、富文本组件封装等。 1. 详细课程地址: https://edu.csdn.net/course/detail/38183 2. 源码下载地址: 点击下载

    2024年02月12日
    浏览(15)
  • 前端 vite+vue3——写一个随机抽奖组件

    前端 vite+vue3——写一个随机抽奖组件

    大家好,我是yma16,本文分享关于前端 vite+vue3——写一个抽奖随机组件。 vue3系列相关文章: 前端vue2、vue3去掉url路由“ # ”号——nginx配置 csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板 认识vite_vue3 初始化项目到打包 python_selenuim获取csdn新星赛道选手所在城

    2024年02月08日
    浏览(13)
  • 前端vue elementUI upload上传组件封装&多文件上传&进度条,后端servlet request.getPart()接收文件信息

    前端vue elementUI upload上传组件封装&多文件上传&进度条,后端servlet request.getPart()接收文件信息

    选中多个文件上传 通过 axios请求 onUploadProgress 方法监听 on-progress on-success 用这两个钩子函数实现进度条 下面有对应的函数。 本文是每个文件一个请求上传 也可以用一个请求上传多个文件,需要将文件遍历添加到 form 表单中,后端用 request.getParts(); 获取集合,有需要的可以改

    2024年02月11日
    浏览(21)
  • 前端歌谣-第伍拾陆课-vue2-element组件封装el-button-groups(续)

    前端歌谣-第伍拾陆课-vue2-element组件封装el-button-groups(续)

    我是歌谣 今天继续给大家带来el-button-groups(项目的讲解

    2024年02月03日
    浏览(12)
  • Taro + vue3 + js + nutUI 框架中自定义tabbar的组件封装以及页面跳转的逻辑

    1.需求:   在H5 中需要封装一个自定义的tabbar 菜单跳转 通过nut-ui 进行二次封装 2. 注意点   H5 中原生的tabbar 在ios 中会出现问题 所以进行 封装tabbar 3. 代码操作 首先全部的代码  4.解析 tabList: 菜单的内容数组  根据自己菜单的数量 来决定 const tabList = reactivemenu[]([     {    

    2024年04月17日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包