v-model用于表單數(shù)據(jù)的雙向綁定械蹋,其實它就是一個語法糖油湖,這個背后就做了兩個操作:
??1. v-bind綁定一個value屬性
??2. v-on指令給當前元素綁定input事件
自定義組件使用v-model饰豺,應該有以下操作:
- 接收一個value prop
- 觸發(fā)input事件晦闰,并傳入新值
在原生表單元素中:
<input v-model="inputValue">
相當于
<input v-bind:value="inputValue" v-on:input="inputValue = $event.target.value">
在自定義組件中
<my-component v-model="inputValue"></my-component>
相當于
<my-component v-bind:value="inputValue" v-on:input="inputValue = argument[0]"></my-component>
這個時候嚣鄙,inputValue接受的值就是input事件的回調函數(shù)的第一個參數(shù)吻贿,所以在自定義組件中,要實現(xiàn)數(shù)據(jù)綁定哑子,還需要$emit去觸發(fā)input的事件舅列。
this.$emit('input', value)
小結:v-model本質上是一個語法糖肌割。如下代碼<input v-model="message">
本質上是<input :value="message" @input="message = $event.target.value">
,其中@input是對<input>
輸入事件的一個監(jiān)聽帐要,:value="message"
是將監(jiān)聽事件中的數(shù)據(jù)放入到input 把敞。v-model不僅可以給input賦值還可以獲取input中的數(shù)據(jù),而且數(shù)據(jù)的獲取是實時的榨惠,因為語法糖中是用@input對輸入框進行監(jiān)聽的奋早。