1、官網定義:
v-model指令-----在表單input,textarea及select元素上創建雙向數據綁定。它會根據控件類型自動選取正確的方法來更新元素。
v-model本質上是語法糖,它負責監聽用戶的輸入事件以更新數據。
<template>
<div>
<div>v-model一般使用方式:</div>
<div>
<input v-model="message">
<p>同步更新為: {{ message }}</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
message: "初始值"
}
}
}
</script>
<style>
</style>
效果:

//相當於把輸入值value屬性綁定為動態值,這個值被input方法控制為輸入值本身,這就使得輸入值變為公用值,實現聯動: ...... <input :value="message" @input="inputMessage" /> ...... //inputMessage方法為: inputMessage(e){ this.message= e.target.value }
2、在父子傳參中的用法:

官網中的這句話-------“一個組件上的v-model默認會利用名為value的 prop 和名為input的事件”
可以理解為:父子組件想通過v-model實現數據雙向聯動,則默認父組件調用子組件時,會把值傳遞給名為value的prop,而子組件觸發input事件時會更新父組件中傳遞的value值!
而value和input是可以通過model選項自己定義的。
(1)子組件中是input輸入框的情況:
》》父組件
<template>
<div>
<div>v-model一般使用方式:</div>
<div>
<input v-model="message">
<input :value="message" @input="inputMessage" />
<p>同步更新為: {{ message }}</p>
</div>
<h5>父子傳參中v-model的使用:子組件中是input輸入框</h5>
<vModelCpn v-model="message"></vModelCpn>
</div>
</template>
<script>
import vModelCpn from './components/v-model-cpn.vue'
export default {
components:{
vModelCpn
},
data() {
return {
message: "初始值"
}
},
methods:{
inputMessage(e){
this.message= e.target.value
}
}
}
</script>
<style>
</style>
》》子組件
<template>
<div>
<input v-model="valueA" />
</div>
</template>
<script>
export default{
props:['value'],
data(){
return{
valueA:""
}
},
watch:{
value:{
handler(val){
this.valueA=val
},
deep:true
}
},
mounted(){
this.valueA=this.value
},
methods:{
}
}
</script>
<style>
</style>
效果:

(2)子組件中不是表單元素的情況:
》》父組件------同上
》》子組件
<template>
<div>
<!-- <input v-model="valueA" /> -->
<p>p標簽能同步嗎????------{{valueA}}</p>
<button @click="changeValue" type="button">改變value值</button>
</div>
</template>
<script>
export default {
props: ['value'],
model: {
prop: 'checked',
event: 'change'
},
data() {
return {
valueA: ""
}
},
watch: {
value: {
handler(val) {
this.valueA = val
},
deep: true
}
},
mounted() {
this.valueA = this.value
},
methods: {
changeValue() {
this.valueA = "改變后的值-----hello!!!"
// this.$emit("input", "改變后的值-----hello!!!")//默認監聽input事件
this.$emit("change", "改變后的值-----hello!!!","3333")
}
}
}
</script>
<style>
</style>
效果:

個人通俗易懂理解:
v-model通過監聽input,change等表單事件來同步prop值,如果子組件不是表單元素,就用自定義事件this.$emit造一個表單事件~~
