位置: IT常识 - 正文

vue3+element-plus Dialog对话框的使用 与 setup 写法的使用

编辑:rootadmin
vue3+element-plus Dialog对话框的使用 与 setup 写法的使用 一. 传统写法不使用setup语法糖

推荐整理分享vue3+element-plus Dialog对话框的使用 与 setup 写法的使用,希望有所帮助,仅作参考,欢迎阅读内容。

vue3+element-plus Dialog对话框的使用 与 setup 写法的使用

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

方式一:通过v-model的方式实现子组件的显示与隐藏

父组件的内容<template> <div> <el-button @click="open">打开</el-button> <Child v-model:visible="flag" ></Child> </div></template><script> import { ref, watch } from 'vue' import Child from "../components/Child.vue" export default { components: { Child }, setup() { const flag = ref(false) const open = () => { flag.value = true } watch(() => flag.value , (val) => { console.log("监听flag值得变化:", val) }) return { flag, open } } }</script>子组件内容<template> <div class="hello"> <el-dialog title="提示" v-model="dialogVisble" width="30%" :before-close="close"> <span>这是一段信息</span> <template #footer> <span class="dialog-footer"> <el-button @click="close">取 消</el-button> <el-button type="primary" @click="confirm">确 定</el-button> </span> </template> </el-dialog> </div></template><script> import { ref, watch } from 'vue' export default { props: { visible: { type: Boolean, default: false } }, setup(props, ctx) { const dialogVisble = ref(false) const close = () => { ctx.emit("update:visible", false); }; const confirm = () => { console.log('你点击了确定按钮') ctx.emit("update:visible", false); } watch(() => props.visible, (val) => { console.log(props.visible, val); dialogVisble.value = val }); return { dialogVisble, confirm, close } } }</script>

方式二:通过为元素绑定ref的方式实现子组件的显示与隐藏

父组件的内容<template> <div> <el-button @click="open">打开</el-button> <Child ref="visibleDialog"></Child> </div></template><script> import { ref } from 'vue' import Child from "../components/Child.vue" export default { components: { Child }, setup() { const visibleDialog = ref(null) const open = () => { visibleDialog.value.dialogVisble = true } return { visibleDialog, open } } }</script>子组件内容<template> <div class="hello"> <el-dialog title="提示" v-model="dialogVisble" width="30%" :before-close="close"> <span>这是一段信息</span> <template #footer> <span class="dialog-footer"> <el-button @click="close">取 消</el-button> <el-button type="primary" @click="confirm">确 定</el-button> </span> </template> </el-dialog> </div></template><script> import { ref } from 'vue' export default { setup(props, ctx) { const dialogVisble = ref(false) const confirm = () => { console.log('你点击了确定按钮') dialogVisble.value = false } const close = () => { dialogVisble.value = false } return { dialogVisble, confirm, close } } }</script>2. setup语法糖写法父组件<template> <Child :user="user" ref="visiableDialog"></Child> <el-button type="primary" @click="openDialog">打开弹窗</el-button></template><script setup>import { reactive, ref } from 'vue'import Child from "../components/childComponents.vue"const visiableDialog = ref(null)const user = reactive({ name: '张三', age: 20})function openDialog() { visiableDialog.value.dialogVisble = true console.log(visiableDialog.value.dialogVisble);}</script>子组件<template> <div class="hello">{{ `${props.user.name}在学习VUE3` }}</div> <el-dialog title="提示" v-model="dialogVisble" width="30%"> <span>这是一段信息</span> <template #footer> <span class="dialog-footer"> <el-button @click="close">取 消</el-button> <el-button type="primary" @click="confirm">确 定</el-button> </span> </template> </el-dialog></template><script setup>import { ref } from 'vue';import { ElMessageBox } from 'element-plus'// 定义控制弹窗显隐的变量const dialogVisble = ref(false)// 接受父组件传过来的值// const props = defineProps({// user: {// type: Object,// default: {}// }// })// 或者const props = defineProps(['user'])function confirm() { ElMessageBox.confirm('确定关闭吗?').then(() => { console.log('你点击了确定按钮') dialogVisble.value = false }).catch(() => { })}function close() { dialogVisble.value = false}// 将变量暴露出来defineExpose({ dialogVisble})</script>

总结:

对于传统写法两种方式来看,都有各自的优缺点,方式一在写法上虽然麻烦了些,但是符合vue的设计原则,尽量少的操作Dom,以操作数据的方式达到了预期的目的。而方式二看起来趋向于我们在vue2中的写法,虽然在写法上简便,但是在原理上则是操作了Dom,总之,两种方式都可以达到我们想要的结果,至于使用那种方式看个人编写代码的习惯吧。对于使用setup语法糖写法来看,代码整体比较整洁,写起来也相对方便快捷
本文链接地址:https://www.jiuchutong.com/zhishi/287306.html 转载请保留说明!

上一篇:vue2项目之swiper.js 的使用(vue中使用swiper6)

下一篇:[ 基础漏洞篇 ] webpack 前端源码泄露详解(漏洞 标准)

  • ipad怎么设置儿童模式限制应用(ipad怎么设置儿童空间)

  • 怎么拉黑微信好友(怎么拉黑微信好友永远加不上)

  • 小米cc9pro充电速度(小米cc9pro33w快充)

  • 荣耀x10是双扬声器吗(荣耀x10有双扬吗)

  • 苹果id开通腾讯视频没到账(苹果id开通腾讯会员)

  • 苹果定位服务系统服务哪些可以关闭(苹果定位服务系统自定可以关闭吗)

  • iphone7突然无服务(iphone7无缘无故无服务)

  • 106电容是多少uf(102电容是多少uf)

  • 小米9背面碎了怎么办(小米9背板碎了)

  • 美团系统派单为什么不平均(美团系统派单为什么后回的先接单)

  • ipad2018怎么长截图(ipad如何进行长截屏)

  • 抖音直播可以用别人的身份证实名吗(抖音直播可以用obs吗)

  • 哔哩哔哩大会员和电视大会员有什么区别

  • oppo支持5g网络的手机(oppo有没有5g手机)

  • 数据库系统的核心是(数据库系统原理)

  • 电脑播放视频没有声音是什么原因(电脑播放视频没有画面是怎么回事)

  • beatsx换手机连不上

  • 长江黄河的源头(长江黄河的源头在哪里在西藏吗)

  • 苹果11pro max什么时候上市(苹果11promax什么颜色好看)

  • 平板cellular版的意思(平板电脑cellular版是什么意思)

  • qq陌生人管理在哪(新版qq陌生人管理在哪)

  • 支付宝如何查询高考成绩(支付宝如何查询婚姻状况)

  • 华为nova4e的虚拟按键在哪里开启(华为nova4e虚拟键盘在哪)

  • qq微云文件能保存多久(qq的微云文件)

  • macOS 10.15.6 补充更新发布 重要的错误修复和改进(mac补丁安装步骤)

  • 公积金贷款所需要的资料(公积金贷款所需手续)

  • HTML+JS 实现 input 框回车事件(js设置input值)

  • python怎样进行反编译(python如何反编译)

  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设 电脑维修 湖南楚通运网络