关于vue3中v-model一些疑惑

499 阅读1分钟

关于vue3中v-model一些疑惑

  • 首先上一个文档上的官方用法

LP29XADZO]Q0JY1(_V{YH.png

这是组件之间双向绑定时,v-model的传入参数与接收方式的写法,我注意到,如果v-model后面没有写自定义的参数名,那么我在子组件接收参数时要用modelValue接收。

如果严格按照这种写法是没有问题的。但如果我不按这种写法,问题就来了,他不并是不能传,而是可以传基础数据类型,但不能传ArrayObject这种复杂数据类型。请看我下面具体的代码。

父组件

       <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(

但我想传一个数组时,这样的写法就行不通了。目前还没找到相关的说法,希望有经验的大佬们能够指点下迷津。