关于vue3中v-model一些疑惑
- 首先上一个文档上的官方用法
这是组件之间双向绑定时,v-model的传入参数与接收方式的写法,我注意到,如果v-model后面没有写自定义的参数名,那么我在子组件接收参数时要用modelValue接收。
如果严格按照这种写法是没有问题的。但如果我不按这种写法,问题就来了,他不并是不能传,而是可以传基础数据类型,但不能传Array和Object这种复杂数据类型。请看我下面具体的代码。
父组件
<AddBuilding
v-model="addBuildingVisible"
:buidlingName="buidlingName"
@update:model-value="updateVisible"
:addBuilding="addBuilding"
/>
const addBuildingVisible = ref(false)
子组件
const props = defineProps({
addBuildingVisible: {
type: Boolean
}
})
console.log(props.addBuildingVisible) // false
可以注意到我并没有使用文档里的写法,但仍能接收到父组件的参数,正当我以为我在其他场景,比如双向绑定一个数组,也能这么写时,问题就出现了。 请看我下面的代码
父组件
<Room v-if="flag" v-model="areaList" @update:model-value="updateAreaList" />
let areaList = ref([])
let flag = ref(false)
const getAreaList = () => {
$api.area.getAreaList().then((res) => {
areaList.value = res.data
flag.value = true
})
}
子组件
const props = defineProps({
areaList:{
type:Array
}
console.log(props.areaList) // undefined
})
由于我没有仔细看文档,就想当然的写,熬了个大夜改bug(
但我想传一个数组时,这样的写法就行不通了。目前还没找到相关的说法,希望有经验的大佬们能够指点下迷津。