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() => {
	// 弹窗保存需要处理的逻辑
}
相关推荐
中微子6 分钟前
RESTful架构与前后端路由演进:构建现代化Web应用的核心规范
前端
前端付豪7 分钟前
13、表格系统架构:列配置、嵌套数据、复杂交互
前端·javascript·架构
南屿im13 分钟前
发布订阅模式和观察者模式傻傻分不清?一文搞懂两大设计模式
前端·javascript
I_have_a_lemon13 分钟前
前端、产品、设计师神器推荐——Onlook
前端·cursor
前端小巷子14 分钟前
深入解析CSRF攻击
前端·安全·面试
JustHappy15 分钟前
SPA?MPA?有啥关系?有啥区别?聊一聊页面形态 or 路由模式
前端·javascript·架构
每天开心15 分钟前
🧙‍♂️闭包应用场景之--防抖和节流
前端·javascript·面试
hxmmm20 分钟前
webpack多入口打包文件
前端
CAD老兵22 分钟前
前端组件库的多主题实现原理与实战指南
前端
归于尽23 分钟前
Generator?从 yield 卡壳,到终于搞懂协程那点事
前端·javascript