v-mode1cannot be used on a prop,because local prop bindingsare not writable.Use a v-bind bindingcomb

在使用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()宏来实现,而不是用之前做法。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值