vue3 v-mode, update:modelValue 线上环境报错modelValue 未定义
最编程
2024-03-18 17:10:12
...
vue3中子组件使用自定义的v-model时候比如,
v-model:editVisible="editVisible" 本地能正常显示使用
打包上线后。浏览器报错editVisible 未定义
在使用vue3进行开发子组件显示隐藏时,我们在父组件中给子组件传递v-model:visible来标识子组件的显隐。 一般情况,父组件中代码为如下:
<Child v-model:editVisible="editVisible" ... />
子组件,一般使用el-plus中的drawer或modal等弹出框,以下以el-drawer为例
<template>
<el-drawer
v-model="editVisible"
title="..."
direction="rtl"
modal-class="drawer-trigger"
:before-close="handleCancel"
:close-on-click-modal="false"
:close-on-press-escape="false"
destroy-on-close
>
...
</el-drawer>
</template>
<script setup>
import ....
const props = defineProps({
editVisible: Boolean
})
const emit = defineEmits(["update:editVisible"])
const handleCancel = () => {
emit('update:editVisible', false)
}
</script>
通过handleCancel方法来改变modelValue的状态,达到关闭drawer的目的。
这种写法在开发过程中,没有任何问题。
但在部署到线上后,会出现error:visible is not defined
备注:“visible”对应子组件v-model的值
完美解决方法:
在子组件中,重新定义子组件v-model的值,将emit(‘update:modelValue’, false)替换。代码如下:
<script setup>
import ....
const props = defineProps({
visible: Boolean
})
const emit = defineEmits(["update:editVisible"])
// 子组件定义自己的visible
const editVisible = computed({
get: () => props.visible,
set: (value) => emit("update:editVisible", value),
})
// handleCancel中修改子组件自己的visible触发emit
const handleCancel = () => {
visible.value = false
}
</script>
上一篇: 学习 webpack 的注意事项
下一篇: WebGPU 和计算加速初探