Vue3 el-dialog 二次封装踩坑实录(v-model moduleValue 不触发)

如果你封装了一个el-dialog的子组件,想通过父组件v-model的形式调用,切记不能使用v-model,要使用 v-model:[你的参数],例如 v-model:visible

js 复制代码
<template>
  <el-dialog
    v-model="dialogVisibale"
    :title="title"
    width="800px"
  >
    <el-card class="mb-5 mt-2">
      测试效果
    </el-card>
    <template #footer>
      <div class="dialog-footer">
        <el-button type="primary" @click="handleConfirm">
          确定
        </el-button>
      </div>
    </template>
  </el-dialog>
</template>

<script setup>
import { ref, computed } from "vue"
const emits = defineEmits(['update:visible', 'listUpdate'])

const props = defineProps({
  title: {
    type: String,
    default: '标题'
  },
  visible: {
    type: Boolean,
    default: false
  },
})
const dialogVisibale = computed({
  get() {
    return props.visible
  },
  set(val) {
    emits('update:visible', val)
  }
})

const handleConfirm = () => {
  dialogVisibale.value = false
  emits('listUpdate')
}

// 取消
const handleClose = (done) => {
  dialogVisibale.value = false
}

</script>

<style scoped lang="less">

</style>
js 复制代码
// 父组件
<template>
	<el-button @click="handleAdd">打开dialog</el-button>
    <staffing-dialog v-model:visible="dialogVisibale" @listUpdate="onSearch"/>
</template>

<script setup>
import staffingDialog from "./staffingDialog.vue";

const dialogVisibale = ref(false);

const handleAdd = () => {
  dialogVisibale.value = true;
}

const onSearch() => {
	// 弹窗保存需要处理的逻辑
}
相关推荐
老前端的功夫5 分钟前
前端Echarts性能优化:从卡顿到流畅的百万级数据可视化
前端·javascript
进击的野人7 分钟前
深入解析localStorage:前端数据持久化的核心技术
前端·javascript
懵圈11 分钟前
第2章:项目启动 - 使用Vite脚手架初始化项目与工程化配置
前端
Mh12 分钟前
如何优雅的消除“if...else...”
前端·javascript
火鸟223 分钟前
给予虚拟成像台尝鲜版十之二,完善支持 HTML 原型模式
前端·html·原型模式·通用代码生成器·给予虚拟成像台·快速原型·rust语言
逍遥江湖44 分钟前
Vue3 + TypeScript 项目框架搭建指南
前端
lapiii3581 小时前
[前端-React] Hook
前端·javascript·react.js
白龙马云行技术团队1 小时前
前端自适应动态架构图演进
前端
一枚前端小能手1 小时前
🎬 使用 Web 动画 API - 关键帧与交互控制实战指南
前端·javascript·api
西西学代码1 小时前
Flutter---异步编程
开发语言·前端·javascript