v-modelの中身

<input v-model="eventData.title"> // は

<input :value="eventData.title" @input="eventData.title = $event.target.value"> // と同じ

data(){
    return {
       eventData: {
          title: "foo"
       }
    }
}

入力が行われた時(@input)にinputイベントにおける入力値($event.target.value)がプロパティ(eventData.title)に代入され、かつそれがフォーム内の値として表示される

フォーム部分をコンポーネントとして分割する(親のプロパティを使う)

親 子が使うプロパティをv-modelで渡す

<EventTitle v-model="eventData.title"> 
(= <EventTitle :value="eventData.title" @input="eventData.title = $event">)
 
data(){
    return {
        eventData: {
            title: "foo"
        }

子 以下をそのまま書く

<input :value="value" @input="$emit('input', $event.target.value)">
 
props: ["value"]
  1. $emitの第一引数に'input'を指定することによって、入力というイベントに乗じて渡された入力値$event.target.valueを親が受け取れる

  2. 受け取った値がeventData.titleに代入される

  3. eventData.valueはpropsによって'value'として子に渡される

  4. 子のフォーム内の値として'value'が表示される