本篇文章給大家分享的是有關(guān)vue中怎么利用v-model指令實現(xiàn)父子組件通信,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)作為成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,有關(guān)成都定制網(wǎng)頁設(shè)計方案、改版、費用等問題,行業(yè)涉及玻璃鋼雕塑等多個領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認可。
vue的雙向數(shù)據(jù)綁定
v-model這個指令只能用在,
這個問題在很多前端面試中,會提及。面試官問你,vue的雙向數(shù)據(jù)綁定原理是什么?當(dāng)然,這個也是耳熟能詳?shù)膯栴},百度隨便一搜索,到處都能找到答案。
一般都會搜索到,是用Object.defineProperty( ) ,來監(jiān)聽數(shù)據(jù)get和set,來實現(xiàn)數(shù)據(jù)劫持的。
假如對Object.defineProperty( )不是很了解,可以點擊上面鏈接,看看其語法!
舉個簡單的例子:
var blog = { name: 'haorooms博客' }; console.log(blog.name); // haorooms博客
如果想要在執(zhí)行console.log(blog.name)
的同時,直接給haorooms博客加個書名號,那要怎么處理呢?或者說要通過什么監(jiān)聽對象 blog的屬性值。這時候Object.defineProperty( )
就派上用場了,代碼如下:
var blog= {} var name = ''; Object.defineProperty(blog, 'name', { set: function (value) { name = value; console.log('歡迎來到' + value); }, get: function () { return '《' + name + '》' } }) blog.name = 'haorooms博客'; // 歡迎來到haorooms博客 console.log(blog.name); // 《haorooms博客》
上面代碼執(zhí)行一下,可以查看效果!
關(guān)于 vue的雙向數(shù)據(jù)綁定,具體如何實現(xiàn)的?網(wǎng)上也有很多實現(xiàn)的代碼,這里就不多累贅了!
v-model 的使用
上面開了一個小差,講了那么多,其實就是為了說明Vue 是單項數(shù)據(jù)流,v-model 只是語法糖而已。
第一行的代碼其實只是第二行的語法糖。然后第二行代碼還能簡寫成這樣:
也就是說,
也可以寫成
v-model在組件上的使用
回到我們一開始的疑問了?vue中v-model如何進行父子組件的通信?如何在組件中使用呢?假如你理解了我上面的例子,那么,我們就可以很簡單的在組件中使用v-model了。
父組件代碼如下:
{{haorooms}}
子組件代碼如下:
我們可以通過上面代碼,子組件修改父組件v-model綁定的值!
實現(xiàn)截圖如下:
v-model 的缺點和解決辦法
在創(chuàng)建類似復(fù)選框或者單選框的常見組件時,v-model就不好用了。
我們可以用如下方式解決:
父組件可以如下寫:
子組件:
@change="$emit('balabala', $event.target.checked)" :checked="value" /> export default { data(){ return{ } }, props: ['checked'], //這里就不用 value 了,而是 checked model: { prop: 'checked', event: 'balabala' }, }
以上就是vue中怎么利用v-model指令實現(xiàn)父子組件通信,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。