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++。

祝学习愉快!

0
heixin_慕雪1363253
hp>谢谢老师!

h021-12-14
共1条回复

0 学习 · 15276 问题

查看课程