v-model的真正形态(v-model只是语法糖)
<input type="text" :value="message" @input="message = $event.target.value">
默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event。所以当我们在一个自定义组件上使用v-model并不能实现双向绑定,因为自定的组件并没有默认的value和input事件,在使用时,我们需要按照上面那样显式的去声明定义这些东西。这时,model选项就派上用场了,在定义组件的时候,指定prop的值和监听的事件。
Vue.component('my-input',{// 通过model指定自定义事件的,双向绑定事件和值model: {// 与下面props中的变量对应prop: 'uname',// 随便命名事件,对应下面$emit即可event: 'changeXXX'},props: {uname: {type: String,default: 'tom'}},methods: {updateVal(val){this.$emit('changeXXX',val)}}})
<template><input type="text" :value="uname" @input="updateVal($event.target.value)"></template>
父组件内使用时,使用v-model就可以啦
// name是父组件中的属性<my-input v-model="name" value="some value"></my-input><p>{{name}}</p>
等价于
<my-input :uname='name' @changeXXX='val => {foo = val}' value='some value'></my-input>
