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 分钟前
告别付费!开箱即用,全网书源一键下载!
前端
the_flash17 分钟前
如何利用SASS中的颜色函数来简化开发
前端·css
打野赵怀真19 分钟前
Electron如何进行网络状态检测?
前端·javascript
蓝桉柒719 分钟前
安装Webpack并创建vue项目
前端·vue.js·webpack
打野赵怀真20 分钟前
请讲讲Electron的Main进程和Renderer进程
前端·javascript
姚生21 分钟前
CSS 中 margin 的注意事项与常见问题
前端·css
小小宇宙中微子21 分钟前
优秀的 Vue.js 入门开源项目推荐
前端·vue.js·开源
谦谦橘子21 分钟前
手写single-spa,理解微前端原理
前端·javascript
知识分享小能手22 分钟前
CSS3学习教程,从入门到精通,CSS3 弹性盒子(Flexbox)布局全面指南(20)
前端·javascript·css·学习·css3·html5·前端开发
ZhongyiChen24 分钟前
【NEXT JS 之旅】next-auth 助力实现最小登录方案
前端·后端·next.js