Vue组件中的v-model(深入解析)
在Vue中,v-model
是一个双向绑定的语法糖,它会根据表单元素的类型自动选择正确的方法来更新数据。
对于输入框,v-model
会利用value
属性和input
事件来创建双向数据绑定。
<template>
<input v-model="message" />
</template>
<script>
export default {
data() {
return {
message: ''
}
}
}
</script>
在上面的例子中,v-model
实现了与message
数据属性的双向绑定。当message
变化时,输入框的显示会更新;当用户在输入框中输入数据时,message
的值也会随之更新。
对于复选框和单选按钮,v-model
会分别使用checked
属性和change
事件来实现绑定。
<template>
<input type="checkbox" id="checkbox" v-model="isChecked" />
<label for="checkbox">{{ isChecked }}</label>
</template>
<script>
export default {
data() {
return {
isChecked: false
}
}
}
</script>
在这个例子中,复选框的选中状态会与isChecked
数据属性保持同步。
自定义组件中使用v-model
时,需要在子组件内部使用$emit
来触发事件,并在父组件中监听相应的事件来更新数据。
// 子组件
<template>
<input :value="value" @input="$emit('update:value', $event.target.value)" />
</template>
<script>
export default {
props: ['value'],
model: {
prop: 'value',
event: 'update:value'
}
}
</script>
// 父组件
<template>
<custom-input v-model="message" />
</template>
<script>
import CustomInput from './CustomInput.vue'
export default {
components: {
CustomInput
},
data() {
return {
message: ''
}
}
}
</script>
在这个例子中,子组件使用了$emit
来发出一个update:value
事件,并将输入框的当前值作为参数传递。父组件通过监听update:value
事件来更新自己的message
数据属性。
评论已关闭