v-model梳理

父組件:

<div id="father">

這里是父組件 父組件的v-model:{{isShow}}

<child :test="aaa" v-model="isShow"></child>

</div>


子組件:

props:{

value:{//可以直接通過value獲取?在父頁面v-model綁定給子組件上的值

?type:Boolean,

?default:true

},

}


官方解釋:

<input v-model="searchText">

等價于

<input :value="searchText" @input="searchText=$event.target.value">

用在組件上時

<custom-input? :value="searchText"? @input="searchText=$event"></custom-input>


所以可以這樣用:

父組件中:

<child? v-model="number"></child>

子組件

props:{value:{}}

<div @click="$emit('input',value+1)">//通過input事件來使父組件的number+1

解釋說明:

通過v-bind把父組件的數(shù)據(jù)綁定到了子組件的props屬性中,而在props上默認用value取值,然后通過$emit觸發(fā)事件input,因為v-model綁定的事件是input,故在子組件上觸發(fā)了父組件的input事件,通過觸發(fā)事件來進行傳值,實現(xiàn)了父子組件數(shù)據(jù)的雙向綁定,相對于直接使用v-bind以及自定義事件代碼量有所減少

原理:

首先我們?yōu)槊總€vue屬性用Object.defineProperty()實現(xiàn)數(shù)據(jù)劫持,為每個屬性分配一個訂閱者集合的管理數(shù)組dep;然后在編譯的時候在該屬性的數(shù)組dep中添加訂閱者,v-model會添加一個訂閱者,{{}}也會,v-bind也會,只要用到該屬性的指令理論上都會,接著為input會添加監(jiān)聽事件,修改值就會為該屬性賦值,觸發(fā)該屬性的set方法,在set方法內(nèi)通知訂閱者數(shù)組dep,訂閱者數(shù)組循環(huán)調(diào)用各訂閱者的update方法更新視圖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在 vue 開發(fā)開發(fā)中, v-model 是一個非常常用的屬性. 常規(guī)模式下,我們給定當(dāng)前組件的某個 data 屬...
    人話博客閱讀 1,564評論 0 50
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,373評論 0 6
  • vue.js是什么 是一套構(gòu)建用戶界面的漸進式框架 vue應(yīng)用組成 一個 Vue 應(yīng)用由一個通過new Vue創(chuàng)建...
    多多醬_DuoDuo_閱讀 1,132評論 0 2
  • 本文是lhyt本人原創(chuàng),希望用通俗易懂的方法來理解一些細節(jié)和難點。轉(zhuǎn)載時請注明出處。文章最早出現(xiàn)于本人github...
    lhyt閱讀 2,296評論 0 4
  • 一、了解Vue.js 1.1.1 Vue.js是什么? 簡單小巧、漸進式、功能強大的技術(shù)棧 1.1.2 為什么學(xué)習(xí)...
    蔡華鵬閱讀 3,497評論 0 3

友情鏈接更多精彩內(nèi)容