這個(gè)屬性通常不太會(huì)注意到桨武,但有的時(shí)候用起來比較舒服嗤放,下面就來具體說說這個(gè)屬性巡球。
model
官網(wǎng)解釋:允許一個(gè)自定義組件在使用 v-model 時(shí)定制 prop 和 event戏自。默認(rèn)情況下邦投,一個(gè)組件上的 v-model 會(huì)把 value 用作 prop 且把 input 用作 event,但是一些輸入類型比如單選框和復(fù)選框按鈕可能想使用 value prop 來達(dá)到不同的目的擅笔。使用 model 選項(xiàng)可以回避這些情況產(chǎn)生的沖突志衣。
簡(jiǎn)單來講就是將組件實(shí)現(xiàn)數(shù)據(jù)雙向綁定的效果见芹,需要注意的是自定義組件
字眼表明其主要的使用場(chǎng)景是在組件內(nèi)部,后面的那一大段是說明緣由的蠢涝。
舉個(gè)例子:
為了獲取input
輸入框的值玄呛,在Vue.js中我們需要使用v-model指令綁定當(dāng)前標(biāo)簽上,如下和二,
<input v-model="name" />
其實(shí)v-model
在Vue.js中的實(shí)現(xiàn)是語法糖徘铝,上面的代碼等價(jià)于<input :value="name" @input="$event.target.value"/>
, Vue.js會(huì)監(jiān)聽用戶輸入事件,不同的控件自動(dòng)監(jiān)聽對(duì)應(yīng)的事件惯吕,比如:select
-> value 作為 prop惕它、change 作為事件
、text/textarea
-> value property 和 input 事件
等废登,通過v-model
實(shí)現(xiàn)數(shù)據(jù)的雙向綁定淹魄。
當(dāng)然,大多的時(shí)候我們還是需要實(shí)現(xiàn)自己業(yè)務(wù)的組件堡距,這個(gè)時(shí)候如果也想簡(jiǎn)單的實(shí)現(xiàn)雙向綁定甲锡,能夠使用v-model
,就需要借助model
這個(gè)屬性了羽戒。
比如說你有個(gè)組件如下:
Vue.component('my-comp', {
model: {
event: 'update'
},
props:
value: [String, Number]
},
// ...
methods: {
func (val) {
this.$emit('update', val)
}
}
})
你在使用的時(shí)候就可以這么用:
<my-comp v-model="fd"></my-comp>
上面的代碼就等價(jià)于
<my-comp
v-bind:value="fd"
@update="val => {fd = val}"
/>
如果你不想使用value
做props
缤沦,這個(gè)時(shí)候你可以這么寫:
props: {
selected: [String, number]
}
model: {
prop: 'selected',
event: 'update'
}
其他的代碼不用更改,這個(gè)也是有問題的易稠,只能使用v-model
得到子組件的傳參缸废,父組件內(nèi)綁定的值更新后,子組件沒更新ui驶社,所以這個(gè)時(shí)候還需要對(duì)子組件的props進(jìn)行監(jiān)聽處理企量。