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() => {
	// 弹窗保存需要处理的逻辑
}
相关推荐
小徐不会敲代码~15 分钟前
Vue3 学习 5
前端·学习·vue
_Kayo_16 分钟前
vue3 状态管理器 pinia 用法笔记1
前端·javascript·vue.js
How_doyou_do16 分钟前
工程级前端智能体FrontAgent
前端
2501_9444460024 分钟前
Flutter&OpenHarmony日期时间选择器实现
前端·javascript·flutter
二狗哈25 分钟前
Cesium快速入门34:3dTile高级样式设置
前端·javascript·算法·3d·webgl·cesium·地图可视化
JS_GGbond26 分钟前
前端实战:让表格Header优雅吸顶的魔法
前端
AlanHou27 分钟前
Three.js:Web 最重要的 3D 渲染引擎的技术综述
前端·webgl·three.js
JS_GGbond29 分钟前
前端必备技能:彻底搞懂JavaScript深浅拷贝,告别数据共享的坑!
前端
拖拉斯旋风30 分钟前
React 跨层级组件通信:使用 `useContext` 打破“长安的荔枝”困境
前端·react.js
没想好d30 分钟前
通用管理后台组件库-3-vue-i18n国际化集成
前端