1. 什么是雙向綁定?
- {{}}和v-bind僅是單向綁定。只能將Model數(shù)據(jù)的值,綁定到頁面表單元素上,用于顯示(M—>V),而頁面上的更改,無法對應修改到Model數(shù)據(jù)中(V—>×M)。
- 雙向綁定既可把程序中Model數(shù)據(jù)綁定到表單元素中顯示,第一個方向:M—>V;同時,又可把表單元素中修改的值,綁定回程序中Model數(shù)據(jù)變量上保存,第二個方向:V—>M。
- 今后,只要希望修改表單元素的值后,也能自動修改對應模型數(shù)據(jù)的值,則用v-model指令進行綁定。
2.如何進行雙向綁定?
- 綁定文本框和文本域
<input type="text" v-model:value="變量">
<textarea v-model:value="變量" ></textarea>
結果:文本框內容一更新,立刻將新值自動更新回程序的變量里。
原理:v-model:value會被自動翻譯為oninput="function(){...}"事件綁定代碼,并在事件處理函數(shù)中封裝修改data中變量的代碼。只要文本框內容被修改,就觸發(fā)DOM的oninput事件,自動執(zhí)行修改data中的變量的代碼。 - 綁定select元素
用不是直接修改select元素的文本,而是通過選擇option來改變select的value。
例如:
<select v-model:value="orderStatus">
<option value="10">未付款</option>
<option value="20">已付款</option>
<option value="30">已發(fā)貨</option>
<option value="40">已簽收</option>
</select>
結果:select的選中項的值改變,就會立刻將新選中的option的value值更新回內存的程序里。
原理:單向綁定時:將Model中的變量值賦值給select的value屬性,然后,select元素會獲得value屬性值去和每個option的value值做比較。哪個option的value等于select的value,就選中哪個option。修改時,<select v-model:value="×××">會被自動翻譯為:<select onchange="vue對象.變量=當前select元素的value屬性值">。
- 綁定radio元素
備選項的value都是固定不變的,所以肯定綁定的不是value屬性,選中與不選中radio改變的其實是它的checked屬性。
例如:
<label><input type="radio" value="1" v-model:checked="sex">男</label>
<label><input type="radio" value="0" v-model:checked="sex">女</label>
原理:單向綁定時,v-model會拿checked屬性綁定的變量值和當前radio的value屬性進行比較。如果綁定的變量的值等于當前radio的vaue,就選中該radio,否則,如果綁定的變量值,不等于當前radio的value,就不選中該radio。
- 綁定checkbox元素
不需要和value作比較,直接用checked屬性綁定到一個bool值變量即可。
<input type="checkbox" v-mode:checked="isAgree">同意
原理:單向綁定時:綁定的變量值返回true,就選中,返回false,就不選中。修改時:直接將checkbox當前的選中狀態(tài)checked屬性值更新回模型變量上。
簡寫形式:v-model="模型變量",省略:value
v-model其實會自動根據(jù)當前所在的不同表單元素,切換不同的屬性綁定。
監(jiān)視函數(shù)
- 什么是監(jiān)視函數(shù)
在模型數(shù)據(jù)發(fā)生變化時,自動執(zhí)行的函數(shù) - 什么時候用監(jiān)視函數(shù)
只要希望在模型數(shù)據(jù)發(fā)生變化時,立刻執(zhí)行一項操作時,需要監(jiān)視函數(shù)監(jiān)控模型變量 - 如何用監(jiān)視函數(shù)
new Vue({
el:"×××",
data:{...}
watch:{
模型變量名(){
//想要執(zhí)行的函數(shù)操作
}
}
})
- 監(jiān)視函數(shù)的函數(shù)名,必須是要監(jiān)視的變量名。