本博客記錄了小編在學習Vue過程中的體會與感悟,簡單來說就是小編的學習筆記,學習地址主要爲Vue的官網,官網地址爲:《Vue官方文檔》。相關學習筆記會記錄在我的博客專欄《前端Vue》中,歡迎大家關注~
一、基礎用法
可以使用v-model指令在<input>、<textarea>、<select>元素上創建雙向數據綁定。它會根據控件類型自動選取正確的方法來更新元素。它負責監聽用戶的輸入事件以更新數據,並對那些極端場景進行一些特殊的處理。
v-model 會忽略所有表單元素的 value、checked、selected 特性的初始值而總是將 Vue 實例的數據作爲數據來源。v-model 在內部爲不同的輸入元素使用不同的屬性並拋出不同的事件:
(1)text 和 textarea 元素使用 value 屬性和 input 事件;
(2)checkbox 和 radio 使用 checked 屬性和 change 事件;
(3)select 字段將 value 作爲 prop 並將 change 作爲事件。
1、文本
<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>
2、多行文本
<span>Multiline message is:</span>
<p style="white-space: pre-line;">{{ message }}</p>
<br>
<textarea v-model="message" placeholder="add multiple lines"></textarea>
3、複選框
(1)單個複選框,綁定到布爾值
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
(2)多個複選框,綁定到同一數組
<div id='example-3'>
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
</div>
new Vue({
el: '#example-3',
data: {
checkedNames: []
}
})
4、單選按鈕
<div id="example-4">
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>Picked: {{ picked }}</span>
</div>
new Vue({
el: '#example-4',
data: {
picked: ''
}
})
5、選擇框
(1)單選時
<div id="example-5">
<select v-model="selected">
<option disabled value="">請選擇</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
new Vue({
el: '...',
data: {
selected: ''
}
})
(2)多選時
<div id="example-6">
<select v-model="selected" multiple style="width: 50px;">
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<br>
<span>Selected: {{ selected }}</span>
</div>
new Vue({
el: '#example-6',
data: {
selected: []
}
})
用v-for渲染的動態選項:
<select v-model="selected">
<option v-for="option in options" v-bind:value="option.value">
{{ option.text }}
</option>
</select>
<span>Selected: {{ selected }}</span>
new Vue({
el: '...',
data: {
selected: 'A',
options: [
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' }
]
}
})
二、值綁定
對於單選按鈕,複選框及選擇框的選項,v-model 綁定的值通常是靜態字符串 (對於複選框也可以是布爾值):
<!-- 當選中時,`picked` 爲字符串 "a" -->
<input type="radio" v-model="picked" value="a">
<!-- `toggle` 爲 true 或 false -->
<input type="checkbox" v-model="toggle">
<!-- 當選中第一個選項時,`selected` 爲字符串 "abc" -->
<select v-model="selected">
<option value="abc">ABC</option>
</select>
但是有時我們可能想把值綁定到 Vue 實例的一個動態屬性上,這時可以用 v-bind 實現,並且這個屬性的值可以不是字符串。
1、複選框
<input
type="checkbox"
v-model="toggle"
true-value="yes"
false-value="no"
>
// 當選中時
vm.toggle === 'yes'
// 當沒有選中時
vm.toggle === 'no'
2、單選按鈕
<input type="radio" v-model="pick" v-bind:value="a">
// 當選中時
vm.pick === vm.a
3、選擇框的選項
<select v-model="selected">
<!-- 內聯對象字面量 -->
<option v-bind:value="{ number: 123 }">123</option>
</select>
// 當選中時
typeof vm.selected // => 'object'
vm.selected.number // => 123
三、修飾符
(1).lazy
在默認情況下,v-model 在每次 input 事件觸發後將輸入框的值與數據進行同步 (除了上述輸入法組合文字時)。你可以添加 lazy 修飾符,從而轉變爲使用 change 事件進行同步:
<!-- 在“change”時而非“input”時更新 -->
<input v-model.lazy="msg" >
(2).number
如果想自動將用戶的輸入值轉爲數值類型,可以給v-model添加number修飾符:
<input v-model.number="age" type="number">
這通常很有用,因爲即使在 type="number" 時,HTML 輸入元素的值也總會返回字符串。如果這個值無法被 parseFloat() 解析,則會返回原始的值。
(3).trim
如果要自動過濾用戶輸入的首尾空白字符,可以給v-model添加trim修飾符:
<input v-model.trim="msg">