modelValue
来源:1-7 父子组件间如何通过事件进行通信(2)
weixin_慕雪1363253
2021-12-14 14:23:59
问题描述:
老师,我用this.$emit('update:modelValue',this.modelValue++)修改modelValue的值,为什么值没有改变,提示 Attempting to mutate prop "modelValue". Props are readonly.呢?
相关代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>modelValue</title>
<script src='https://unpkg.com/vue@next'></script>
</head>
<body>
<div id='root'></div>
</body>
<script>
const app=Vue.createApp({
data(){
return {
data:1
}
},
template:`<child v-model='data' />`
})
app.component(`child`,{
props:['modelValue'],
methods:{
handelClick(){
this.$emit('update:modelValue',this.modelValue++)
}
},
template:`<div @click='handelClick'>{{modelValue}}</div>`
});
const vm=app.mount('#root');
</script>
</html>1回答
好帮手慕然然
2021-12-14
同学你好,原因如下:
首先,this.modelValue++相当于this.modelValue = this.modelValue+1,这里有一个给this.modelValue赋值的过程,而子组件是不能修改父组件传递过来的props数据,所以才会出现警告。
其次,通过 $emit 调用方法并传递数据时,第二个参数的位置应该是一个带有结果的数据,所以如果要实现每点击一次递增1的效果,应该使用this.modelValue+1,而不是this.modelValue++。
祝学习愉快!
相似问题