在使用vue3开发上传组件的时候遇到这样的问题,这个意思是说
v- model不能用于prop,因为本地绑定prop是不可写的。使用v-bind绑定与emits触发更新update:x事件的von监听器相结合。
出现的原因:
children components
<component>
<van-uploader v-model="modelValue" :after-read="afterRead"/>
</component>
<script setup>
definedProps({
modelValue:[]
})
coant emits =definedEmits(['update:modelValue'])
function afterRead(file){
//...调用接口获取返回的网络路径,
emits('update:modelValue',res.imagePath)
}
</script>
导致的原因:
我用的vue版本是3.4.21,查阅官方文档得知,自3.4版本以后,推荐使用defineModel() 宏来实现组件上的双向绑定;看到这大致明白了,因为vue3刚出来时,这个defineModel宏还是试验阶段,现在最新版后要推正式了,老旧的做法或许将被遗弃 vue官方文档v-model组件的介绍
改正之后:
children components
<component>
<van-uploader v-model="modelValue" :after-read="afterRead"/>
</component>
<script setup>
const modelValue = definedModel({default:[]})
function afterRead(file){
//...调用接口获取返回的网络路径,
modelValue.value = res.imagePath
}
</script>
//父组件使用
<component>
<Child v-model=myRef />
</component>
<script setup>
import {ref} from 'vue'
const myRef = ref([])
</script>
总结
vue自3.4版本以后,组件间数据双向绑定推荐使用defineModel()宏来实现,而不是用之前做法。