vue2和vue3v-model 对组件用法不一样
时间: 2023-12-07 19:03:51 浏览: 78
vue2和vue3的v-if与v-for优先级对比学习
是的,Vue 2 和 Vue 3 在 v-model 对组件的用法上有一些不同。
在 Vue 2 中,使用 v-model 绑定组件时,组件内部需要定义名为 `value` 的 prop,并且在组件内部通过 `$emit` 方法触发名为 `input` 的自定义事件来更新父组件的数据。例如:
```vue
// 父组件
<template>
<custom-component v-model="data"></custom-component>
</template>
<script>
export default {
data() {
return {
data: ''
};
}
};
</script>
// 子组件 CustomComponent.vue
<template>
<input :value="value" @input="$emit('input', $event.target.value)" />
</template>
<script>
export default {
props: ['value']
};
</script>
```
而在 Vue 3 中,v-model 对组件的使用更加灵活,并且不再需要定义名为 `value` 的 prop。可以通过使用 `v-bind` 和 `v-on` 指令来实现自定义的双向绑定。例如:
```vue
// 父组件
<template>
<custom-component v-model="data"></custom-component>
</template>
<script>
export default {
data() {
return {
data: ''
};
}
};
</script>
// 子组件 CustomComponent.vue
<template>
<input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" />
</template>
<script>
export default {
props: ['modelValue']
};
</script>
```
可以看到,在 Vue 3 中,父组件通过 `v-model` 绑定时,子组件接收的 prop 名称为 `modelValue`,并且通过在 `@input` 事件中使用 `update:modelValue` 自定义事件来更新父组件的数据。
总之,Vue 3 中的 v-model 对组件的用法更加灵活,并且不再需要在组件内部定义名为 `value` 的 prop。这使得在使用自定义组件时更加简洁和易用。
阅读全文