Vue.js的元件(四)父元件與子元件的資料聯絡 之 雙向繫結
阿新 • • 發佈:2019-01-04
之前有說到,父元件傳資料到子元件是通過元件的屬性props
來實現的,這是一種單向繫結。父可以影響子,子不能影響父。
但是子可以通過自定義事件來讓自己的資料影響到父。
只要把這兩種方法結合起來,就可以實現父與子資料的雙向繫結。
//js
/*為了方便理解過程,把v-model拆分成v-bind,和v-on:input="$event.target.value"*/
Vue.component('my-input',{
props['myprops'],
template:'<input v-bind:value="myprops"
v-on:input="updateValue($event.target.value)" >',
methods:{
updateValue":function(value){
var myValue = value; //將輸入的文字框內容傳來
this.$emit('shijian',myValue); //自定義事件,並傳參
}
}
})
var app5 = new Vue({
el:'#app5',
data:{
message:''
},
method:{
fatherValue:function(myValue){
this.message = myValue;
}
}
})
//html
<div id="app5">
//實時顯示message的值
<p>{{message}}</p>
//傳統的雙向繫結
<input v-model="message">
//父元件與子元件的雙向繫結
<my-input v-bind:value="message" v-on:shijian="fatherValue"></my-input>
</div>
梳理一下程式執行的流程。
1、子元件通過v-on:input="updateValue($event.target.value)"
2、在updateValue方法裡,定義一個自定義事件,並將獲取的引數暴露給父模板。
3、父模板在前端(html)中使用
v-on:shijian="fatherValue"
捕獲子元件提供的引數和自定義事件。並指向一個方法fatherValue
. 4、
fatherValue
方法使用了來自子元件的引數,並賦給了父元件的變數。從而改變了父元件變數的值。
5、父元件的值的改變導致子元件的屬性props的變化。
6、從而改變了子元件的值。因為子元件通過props綁定了該值。