大家都知道vue是单项数据流的,子组件不能直接修改父组件传过来的props。那么如何实现子组件修改父组件的值呢。。。
先看下v-model原理
<template>
<my-component v-model="msg"></my-component>
<my-component :modelValue="msg" @update:modelValue="msg = $event"></my-component>
</template>
所以,子组件的值变化了,我们可以通过emit,不是直接修改props,而是通知父组件去修改该值!
修改方法
<template>
<my-component v-model:modelValue="msg"></my-component>
</template>
<script setup>
import { ref } from 'vue'
const msg = ref('hello')
</script>
<template>
<el-input :modelValue="modelValue" @change="handleValueChange ""></el-input>
</template>
<script setup>
const props = defineProps({
modelValue: {
type: String,
default: '',
}
});
const emit = defineEmits(['update:modelValue']);
const handleValueChange = (value) => {
emit('update:modelValue', value)
}
</script>