1.v-model 解析
- 语法糖
- 在内部为不同的输入元素使用不同的
property并抛出不同的事件:
a.
text和textarea元素使用value property和input事件;
b.checkbox和radio使用checked property和change事件;
c.select字段将value作为prop并将change作为事件。
2.v-model实现
### parent.vue
<template>
<div>
<s-input v-model="value" />
<p>{{value}}</p>
</div>
</template>
<script>
import sInput from './sInput.vue'
export default{
components: { sInput },
data(){
return {value: ''}
}
}
</script>
a. input事件
### sInput.vue
<template>
<input type="text" :value="value" @input="$emit('input', $event.target.value)" />
</template>
<script>
export default{
props: {
value: {
type: String,
default: ''
}
}
}
</script>
b. change事件
### sInput.vue
<template>
<input type="text" :value="value" @change="$emit('change', $event.target.value)" />
</template>
<script>
export default{
//解析v-model指令
model: {
prop: 'value',
event: 'change'
},
props: {
value: {
type: String,
default: ''
}
}
}
</script>