Vue表單輸入繫結
<h3>基礎用法</h3>
<p>你可以用<strong>v-model</strong>指令在表單input,textarea以及select元素上建立雙向資料繫結。它會根據控制元件型別自動選取正確的方法來更新元素。儘管有些神奇,但是v-model本質上不過是語法糖。它負責監聽使用者的輸入事件以更新資料。</p>
<blockquote>
<strong>v-model</strong>會忽略所有表單元素的value, checked, selected特性的初始值而總是將Vue例項的資料作為資料來源。你應該通過JavaScript在元件的data選項中宣告初始值。</blockquote>
<p><strong>(1) 文字</strong></p>
<input v-model="message" placehoder="edit me">
<p><strong>(2) 多行文字</strong></p>
<textarea v-model="message"></textarea>
<p><strong>(3) 複選框</strong><br>單個複選框,繫結到布林值:</p>
<input type="checkbox" v-model="checked">
<p>多個複選框,繫結到同一個陣列:</p>
<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: [] } })
<p><strong>(4) 單選按鈕</strong></p>
<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: ''
}
})
<p><strong>(5) 選擇框</strong><br>單選時:</p>
<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: ''
}
})
<blockquote>如果 v-model 表示式的初始值未能匹配任何選項,<select> 元素將被渲染為“未選中”狀態。在 iOS 中,這會使使用者無法選擇第一個選項。因為這樣的情況下,iOS 不會觸發 change 事件。因此,更推薦像上面這樣提供一個值為空的禁用選項。</blockquote>
<p>多選時(繫結到一個數組)</p>
<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: []
}
})
<h3>值繫結</h3>
<p>對於單選按鈕,複選框以及選擇框的選項,v-model繫結的值通常是靜態字串(對於複選框也可以是布林值):</p>
<!-- 當選中時,`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>
<p>(1) <strong>複選框</strong></p>
<input
type="checkbox"
v-model="toggle"
true-value="yes"
false-value="no"
>
<blockquote>這裡的 true-value 和 false-value 特性並不會影響輸入控制元件的 value 特性,因為瀏覽器在提交表單時並不會包含未被選中的複選框。如果要確保表單中這兩個值中的一個能夠被提交,(比如“yes”或“no”),請換用單選按鈕。</blockquote>
<p>(2) <strong>單選按鈕</strong></p>
<input type="radio" v-model="pick" v-bind:value="a">
// 當選中時
vm.pick === vm.a
<h3>修飾符</h3>
<p>(1) <strong>.lazy</strong><br>在預設情況下,v-model 在每次 input 事件觸發後將輸入框的值與資料進行同步 (除了上述輸入法組合文字時)。你可以新增 lazy 修飾符,從而轉變為使用 change 事件進行同步:</p>
<p>(2) <strong>.number</strong><br>如果想自動將使用者的輸入值轉為數值型別,可以給 v-model 新增 number 修飾符</p>
<p>(3) <strong>trim</strong><br>如果要自動過濾使用者輸入的首尾空白字元,可以給 v-model 新增 trim 修飾符:</p>