Vue中用v-model實現父元件和子元件之間的資料通訊
阿新 • • 發佈:2018-12-16
在Vue中實現父子元件之間的資料通訊,除了用傳統的Props/emit還有sync外,還能使用v-model來實現(2.2.0 新增)。
型別:{ prop?: string, event?: string }
model允許一個自定義元件在使用 v-model 時定製 prop 和 event。預設情況下,一個元件上的 v-model 會把 value 用作 prop 且把 input 用作 event,但是一些輸入型別比如單選框和複選框按鈕可能想使用 value prop 來達到不同的目的。使用 model 選項可以迴避這些情況產生的衝突。
//parent
<my-checkbox v- model="foo" value="some value"></my-checkbox>
//children
Vue.component('my-checkbox', {
model: {
prop: 'counter',
event: 'change'
},
props: {
// this allows using the `value` prop for a different purpose
value: String,
// use `checked` as the prop which take the place of `value`
counter: {
type: Number,
default: 0
}
},
methods:{
fn(){
this.$emit('change', this.counter+2)
}
},
template: '<button @click="fn()">add counter</button>'
// ...
})
上面的程式碼相當於
<my-checkbox
:counter="foo"
@change="val => { foo = val }"
value="some value" >
</my-checkbox>