您好,登錄后才能下訂單哦!
這篇文章主要講解了“修飾符v-model與.sync有哪些區別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“修飾符v-model與.sync有哪些區別”吧!
1. 作用
相信過使用過vue框架的朋友對這個指令不會感到陌生,v-model是用來進行<input>
、<textarea>
、<select>
元素上數據的雙向綁定的。
例如:
<template> <div > <input v-model="value" type="text"/> //這里的v-model里面的value可以直接獲取到用戶的輸入值 </div> </template> <script> export default { components: {}, data() { return { value:"", //這里定義的value變量可以直接將上面獲取到的值進行操作 }; }, } </script> <style scoped> </style>
當我們在input框里輸入了某個值的時候,下面data里的value就可以直接后去到我們輸入的值,而不需要操作dom元素進行獲取。
1. 本質
v-model本質上來說是一個語法糖,我們習慣性的寫法是這樣的:
<input v-model="value" type="text"/>
但是實際上完整的寫法是這樣的:
<input :value="value" @input="value=$event.target.value" type="text" />
通過對比語法糖和原始寫法可以得出:
再給<input/>
元素添加v-model屬性時,默認會把value作為元素的屬性,然后把input
事件作為實時傳遞value的觸發事件。
注意:不是所有能進行雙向數據綁定的元素都是input事件!
3、特殊用法
一般情況下,我們使用v-model主要是用于數據的雙向綁定,可以十分方便的獲取到用戶輸入的值,但在某些特殊情況下,我們也可以將v-model用于父子組件之間數據的雙向綁定。
<template> <div class="father"> <Son v-model="str"/> </div> </template> <script> import Son from '@/components/Son.vue'; //引入子組件 export default { components: {Son}, data() { return { str:"father" }; }, } </script>
這里定義了一個father組件和son組件,并且將son組件引入到father組件中,給son組件綁定了v-model進行了傳值。此時我們需要在son組件中接收并使用這個值:
<template> <div class="son"> 我是在son組件里接收到的值:{{value}} </div> </template> <script> export default { components: {}, props:{ value:{ type:String, }, }, } </script>
注意:這里接受的值必須是value,寫成其他名字將會報錯!
父組件向子組件傳值,子組件中是不能直接修修改數據的,直接修改的話就會報錯
當我們需要修改這個值時,就需要再將其傳入到父組件中修改。
這就需要在父組件中的子組件上定義一個自定義事件,通過子組件$emit('自定義事件名稱','值')
的方法將值傳入父組件。
但是在這里我們不能使用自定義事件,因為我們用的是v-model傳值,所以我們只能使用input事件進行修改。
子組件中使用$emit()
方法.調用父組件中的事件,并且進行傳值
<template> <div class="son"> 我是在son組件里接收到的值:{{value}} <button @click="handleClick">click</button> </div> </template> <script> export default { components: {}, data() { return { str:'son' }; }, props:{ value:{ type:String, }, }, methods: { handleClick(){ this.$emit('input',this.str) } }, } </script>
這樣就完成父子組件之間的數據雙向綁定效果
1、作用
.sync修飾符可以實現父子組件之間的雙向綁定,并且可以實現子組件同步修改父組件的值,相比較與v-model
來說,sync
修飾符就簡單很多了:
2、本質
//正常父傳子 <Son :a="num" /> //加上sync之后的父傳子 <Son :a.sync="num" /> //它等價于 <Son :a="num" @update:a="val=>a=val" /> //相當于多了一個事件監聽,事件名是update:a, //回調函數中,會把接收到的值賦值給屬性綁定的數據項中。
這里面的傳值與接收和正常的父組件向子組件傳值沒有區別,唯一的區別在于子組件往回傳值的時候$emit所調用的事件名必須是update:屬性名
,事件名寫錯不會報錯,但那時也不會有任何改變,這點需要注意。
感謝各位的閱讀,以上就是“修飾符v-model與.sync有哪些區別”的內容了,經過本文的學習后,相信大家對修飾符v-model與.sync有哪些區別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。