当前位置: 首页 > news >正文

Vue3 父组件引用子组件并控制子组件显隐及数据传递

子组件 UserFormDialog.vue

<!-- 用户新增和修改组件 -->
<template><!-- 弹窗 --><el-dialog v-model="visible" :title="title" width="60%" @close="handleClose"><el-form ref="dataFormRef" :model="formData" :rules="rules" label-width="80px">      ......</el-form><template #footer><div class="dialog-footer"><el-button type="primary" :loading="loading" @click="handleSubmit">确 定</el-button><el-button @click="handleClose">取 消</el-button></div></template></el-dialog>
</template><script setup>
import {ref, reactive, watch, nextTick} from 'vue'
import { ElMessage } from 'element-plus'// 1.使用 Vue 3.4+ 的 defineModel 定义了一个名为 visible 的双向绑定变量。父组件通过 v-model 传入该值,子组件修改它会自动同步到父组件,常用于控制弹窗显示/隐藏
const visible = defineModel({type: Boolean,default: false
})// 定义属性
const props = defineProps({// 弹窗类型 add: 新增 edit: 修改title: {type: String,default: ''},// 表单数据initData: {type: Object,default: () => ({})}
})// 2.定义事件
const emit = defineEmits(['success'])const loading = ref(false)
const dataFormRef = ref()// 本地表单数据(用于双向绑定和验证)
const formData = reactive({});// 表单校验
const rules = {......
};
// 监听外部传入的显示状态,当 visible 为 true 时填充表单数据
watch(visible, (val) => {if (val) {// 打开时填充表单数据nextTick(() => {Object.assign(formData, props.initData || {})dataFormRef.value.clearValidate()})}
})// 关闭弹窗
const handleClose = () => {visible.value = false
}// 提交表单
const handleSubmit = () => {dataFormRef.value.validate(async (valid) => {if (valid) {try {loading.value = true;const submitData = {...formData}// 新增或修改if (submitData.userId) {await UserAPI.update(submitData)ElMessage.success("修改成功");} else {await UserAPI.add(submitData)ElMessage.success("新增成功");}// 3.通知父组件刷新列表emit('success') handleClose();} catch (error) {ElMessage.error(error?.message || '操作失败');} finally {loading.value = false;}}});
}
</script><style lang="scss" scoped></style>

父组件 index.vue

<template><div class="app-container-row"><el-button type="success" icon="plus" @click="handleAddOrUpdate(undefined)">新增</el-button><!-- 1.子组件 v-model="dialog.visible"  对应子组件的 const visible = defineModel({type: Boolean,  default: false})@success="handleQuery"    对应子组件的 const emit = defineEmits(['success']); emit('success') --><UserFormDialogv-model="dialog.visible":title="dialog.title":init-data="initFormData"@success="handleQuery"/></div>
</template><script setup>
import {onMounted, reactive, ref, toRaw} from 'vue'
import UserFormDialog from "@/views/system/user/UserFormDialog.vue";/*** 定义组件名称:在调试工具(如 Vue DevTools)中会显示为组件名称,便于识别和调试* 支持<keep-alive>缓存*/
defineOptions({name: 'User'
})//==============用户表单=================
// 2.初始化子组件标题和显隐
const dialog = reactive({title: "",visible: false,
});const defaultFormData = {userId: undefined,loginName: '',nickName: '',gender: 1,deptId: undefined,phone: '',email: '',remark: ''
}const initFormData = reactive({ ...defaultFormData })// 新增或修改页面
function handleAddOrUpdate(rowData) {......dialog.visible = true;
}// 查询
function handleQuery() {}
</script><style lang="scss" scoped></style>
http://www.gsyq.cn/news/1534692.html

相关文章:

  • 【雷达】调频连续波(FMCW)合成孔径雷达(SAR)模拟器附Matlab代码
  • 机器人多层陶瓷电容器(MLCC)
  • 航空常旅客计划:深度解析飞行活跃度暂停机制与权益保全策略
  • 用r²决定系数做股票市场相关性分析的实战方法
  • AMD Ryzen调试工具SMUDebugTool:免费开源的硬件性能终极指南
  • ClickHouse 物化视图优化:从查询加速到数据预聚合的工程实践
  • 枣庄薛城黄金变现指南 新手必学避坑技巧与正规门店盘点 - 铂衡汇黄金珠宝
  • 从Dareway案例解析个人品牌冷启动:定位、MVP与增长实战
  • WAIC技术落地十大趋势:从大模型轻量化到人机协同工作流
  • 北京西城区黄金回收行情警示与六家机构对比 - 上门黄金回收
  • 数字电子技术基础:从逻辑门到FPGA的实践指南与核心难点解析
  • DeepSeek-R1本地部署超详细实战指南:从零到法律级合同审查
  • 福州鼓楼区黄金回收行情分析及六家正规机构对比 - 上门黄金回收
  • 免费获得专业级AI视频生成能力:Wan2.2-TI2V-5B开源模型终极指南
  • 红米10X 5G刷机全攻略:从解锁BL到安全刷入第三方ROM
  • 2026渭南本地认可的 5 家排污许可废气废水监测机构实地测评汇总 废水废气 + 自行监测 + CMA 检测报告 附电话地址 - 科信检测
  • 2026咸宁本地认可的 5 家排污许可废气废水监测机构实地测评汇总 废水废气 + 自行监测 + CMA 检测报告 附电话地址 - 科信检测
  • 2026淮北本地防雷检测哪家专业?TOP 正规机构榜单 + 防雷装置 + 接地电阻 + SPD 检测 附电话地址 - 中安检测集团
  • 量化交易中的p值陷阱:识别与防范p-Hacking
  • 从零开始:用Python自动化脚本轻松搞定大麦网抢票难题
  • 豆包2.0生产力操作系统:多模态上下文一致性实战指南
  • Gemini Mac原生应用:上下文感知与屏幕共享技术解析
  • 2026乌鲁木齐贵金属旧料回收优质实体店精选 5 家 黄金回收铂金白银回收真实探店测评清单 - 中业金奢再生回收中心
  • 32960协议解析、处理消息乱序、做设备影子
  • 2026保姆级指南:提取视频人声转文字工具推荐,高准确率免费电脑手机在线AI字幕提取教程 - AI测评专家
  • 实测对比:4 卡 vs8 卡 5090 服务器大模型推理吞吐量差距 - 智恒百亿
  • 达梦数据库连接工具全攻略:选型、配置与实战排错
  • 中国大模型出海实战:企业级API服务落地东南亚
  • 从思维可视化到高效沟通:构建个人画图本工作流的核心方法与工具
  • 快捷支付 VS 网关支付 要点速览