//父組件 <template> <div> <Child v-model="message" /> <div>綁定的值:{{message}}</div> </div> </template> //子組件 <template> <div> <input type="text" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" > </div> </template> <script> export default { //2.x用法,能夠修改prop和觸發的事件名稱,model以廢棄 // model: { // prop: 'value', //3.x默認值改成了modelValue // event: 'input' //3.x默認值改成了update:modelValue // }, props:['modelValue'] } </script>
2.x移除了model配置,3.x那又該怎麼配置其餘prop呢?vue
//父組件 <template> <div> <Child v-model:text="message" /> <div>綁定的值:{{message}}</div> </div> </template> //子組件 <template> <div> <input type="text" :value="text" @input="$emit('update:text', $event.target.value)" > </div> </template> <script> export default { //3.x 接收v-model冒號後面的值,相應的觸發的方法改成update:text props:['text'] } </script>
//父組件 <template> <div> <Child v-model="message1" v-model:text="message2" /> <div>綁定的值1:{{message1}}</div> <div>綁定的值2:{{message2}}</div> </div> </template> //子組件 <template> <div> <input type="text" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" > <input type="text" :value="text" @input="$emit('update:text', $event.target.value)" > </div> </template> <script> export default { //v-model冒號後面不寫值,默認就是modelValue props:['modelValue','text'] } </script>
非自定義組件中,v-model除了.sync之外,其餘依然仍是能夠使用的,好比:.lazy、.trim等this
//父組件 <template> <div> <Child v-model.toUpperCase="message1" v-model:text.toLowerCase="message2" /> <div>綁定輸入的字母全爲大寫:{{message1}}</div> <div>綁定輸入的字母全爲小寫:{{message2}}</div> </div> </template> //子組件 <template> <div> <input type="text" :value="modelValue" @input="handleInput1" > <input type="text" :value="text" @input="handleInput2" > </div> </template> <script> export default { props:['modelValue','modelModifiers','text','textModifiers'], created(){ //對不帶參數的v-model綁定,檢查對象名稱爲:modelModifiers //對於帶prop參數的v-model綁定,檢查對象名稱爲:prop + modelModifiers console.log(this.modelModifiers); //{toUpperCase: true} console.log(this.textModifiers); //{toLowerCase: true} }, methods: { handleInput1(e){ let value = e.target.value; if(this.modelModifiers.toUpperCase){ value = value.toUpperCase(); } this.$emit("update:modelValue", value) }, handleInput2(e){ let value = e.target.value; if(this.textModifiers.toLowerCase){ value = value.toLowerCase(); } this.$emit("update:text", value) } } } </script>