1、v-model是什么?
- 在 Vue.js 中,
v-model是一个用于双向数据绑定的指令,广泛应用于表单控件。使用v-model可以让视图和数据之间保持同步。
2、实现一个自定义组件的 v-model 绑定主要涉及以下几个部分:
- 绑定内部状态。
- 同步外部状态。
- 自定义事件。
3、实现 v-model 的基础
当使用 v-model 时,Vue.js 实际上是在内部做了以下两件事:
- 将一个 prop 传递进组件,通常称为
value。 - 监听一个名为
input的自定义事件,用于更新父组件中的value。
4、示例如下
// 子组件
<template>
<input :value="value" @input="handleInput" />
</template>
<script>
export default {
name: 'CustomInput',
props: ['value'],
methods: {
handleInput(event) {
this.$emit('input', event.target.value);
}
}
}
</script>
// 使用 `v-model`
<template>
<div>
<CustomInput v-model="inputValue" />
<p>{{ inputValue }}</p>
</div>
</template>
<script>
import CustomInput from './CustomInput.vue';
export default {
components: {
CustomInput
},
data() {
return {
inputValue: ''
}
}
}
</script>
CustomInput组件接收一个valueprop,这是v-model在父组件中绑定的值。- 当
<input>的@input事件被触发时,handleInput方法会使用this.$emit('input', value)发出一个名为input的事件,把输入的值发送给父组件。
5、总结
v-model是 Vue.js 提供的一个用于双向绑定的特殊语法糖。- 实现
v-model主要包含两个部分:绑定值的prop和触发更新的event。 - 可以通过
model选项自定义v-model的prop名和event名,以适应不同的需求。 - 适用于简单的输入控件和复杂的自定义组件。