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() => {
	// 弹窗保存需要处理的逻辑
}
相关推荐
代码老中医2 分钟前
接手老项目的一个月,我重构了那个2000行的“祖传”React组件
前端
用户830407130570132 分钟前
路由传参刷新丢失问题:三种解决方案与最佳实践
前端
从文处安34 分钟前
「前端何去何从」高效提示词(prompts):前端开发者的AI协作指南
前端·aigc
大时光35 分钟前
gsap--《pink老师vivo官网实现》
前端
www_stdio38 分钟前
全栈项目第五天:构建现代企业级 React 应用:从工程化到移动端实战的全链路指南
前端·react.js·typescript
my_styles41 分钟前
window系统安装/配置Nginx
服务器·前端·spring boot·nginx
神奇的程序员1 小时前
不止高刷:明基 RD280UG 在编码场景下的表现如何
前端
Rabbit_QL1 小时前
【音频处理】从 AirPods 主动降噪到音频 Source Separation:同一个问题的两种工程解法
前端·人工智能·音视频
-孤存-1 小时前
Spring Bean作用域与生命周期全解析
java·开发语言·前端
QEasyCloud20221 小时前
WooCommerce 独立站系统集成技术方案
java·前端·数据库