1. 程式人生 > >Vue表單輸入繫結

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>

&lt;input v-model="message" placehoder="edit me"&gt;

<p><strong>(2) 多行文字</strong></p>

&lt;textarea v-model="message"&gt;&lt;/textarea&gt;

<p><strong>(3) 複選框</strong><br>單個複選框,繫結到布林值:</p>

&lt;input type="checkbox" v-model="checked"&gt;

<p>多個複選框,繫結到同一個陣列:</p>

&lt;div id='example-3'&gt;
  &lt;input type="checkbox" id="jack" value="Jack" v-model="checkedNames"&gt;
  &lt;label for="jack"&gt;Jack&lt;/label&gt;
  &lt;input type="checkbox" id="john" value="John" v-model="checkedNames"&gt;
  &lt;label for="john"&gt;John&lt;/label&gt;
  &lt;input type="checkbox" id="mike" value="Mike" v-model="checkedNames"&gt;
  &lt;label for="mike"&gt;Mike&lt;/label&gt;
  &lt;br&gt;
  &lt;span&gt;Checked names: {{ checkedNames }}&lt;/span&gt;
&lt;/div&gt;

new Vue({
  el: '#example-3',
  data: {
    checkedNames: []
  }
})

<p><strong>(4) 單選按鈕</strong></p>

&lt;div id="example-4"&gt;
  &lt;input type="radio" id="one" value="One" v-model="picked"&gt;
  &lt;label for="one"&gt;One&lt;/label&gt;
  &lt;br&gt;
  &lt;input type="radio" id="two" value="Two" v-model="picked"&gt;
  &lt;label for="two"&gt;Two&lt;/label&gt;
  &lt;br&gt;
  &lt;span&gt;Picked: {{ picked }}&lt;/span&gt;
&lt;/div&gt;

new Vue({
  el: '#example-4',
  data: {
    picked: ''
  }
})

<p><strong>(5) 選擇框</strong><br>單選時:</p>

&lt;div id="example-5"&gt;
  &lt;select v-model="selected"&gt;
    &lt;option disabled value=""&gt;請選擇&lt;/option&gt;
    &lt;option&gt;A&lt;/option&gt;
    &lt;option&gt;B&lt;/option&gt;
    &lt;option&gt;C&lt;/option&gt;
  &lt;/select&gt;
  &lt;span&gt;Selected: {{ selected }}&lt;/span&gt;
&lt;/div&gt;

new Vue({
  el: '...',
  data: {
    selected: ''
  }
})

<blockquote>如果 v-model 表示式的初始值未能匹配任何選項,<select> 元素將被渲染為“未選中”狀態。在 iOS 中,這會使使用者無法選擇第一個選項。因為這樣的情況下,iOS 不會觸發 change 事件。因此,更推薦像上面這樣提供一個值為空的禁用選項。</blockquote>
<p>多選時(繫結到一個數組)</p>

&lt;div id="example-6"&gt;
  &lt;select v-model="selected" multiple style="width: 50px;"&gt;
    &lt;option&gt;A&lt;/option&gt;
    &lt;option&gt;B&lt;/option&gt;
    &lt;option&gt;C&lt;/option&gt;
  &lt;/select&gt;
  &lt;br&gt;
  &lt;span&gt;Selected: {{ selected }}&lt;/span&gt;
&lt;/div&gt;

new Vue({
  el: '#example-6',
  data: {
    selected: []
  }
})

<h3>值繫結</h3>
<p>對於單選按鈕,複選框以及選擇框的選項,v-model繫結的值通常是靜態字串(對於複選框也可以是布林值):</p>

&lt;!-- 當選中時,`picked` 為字串 "a" --&gt;
&lt;input type="radio" v-model="picked" value="a"&gt;

&lt;!-- `toggle` 為 true 或 false --&gt;
&lt;input type="checkbox" v-model="toggle"&gt;

&lt;!-- 當選中第一個選項時,`selected` 為字串 "abc" --&gt;
&lt;select v-model="selected"&gt;
  &lt;option value="abc"&gt;ABC&lt;/option&gt;
&lt;/select&gt;

<p>(1) <strong>複選框</strong></p>

&lt;input
  type="checkbox"
  v-model="toggle"
  true-value="yes"
  false-value="no"
&gt;

<blockquote>這裡的 true-value 和 false-value 特性並不會影響輸入控制元件的 value 特性,因為瀏覽器在提交表單時並不會包含未被選中的複選框。如果要確保表單中這兩個值中的一個能夠被提交,(比如“yes”或“no”),請換用單選按鈕。</blockquote>
<p>(2) <strong>單選按鈕</strong></p>

&lt;input type="radio" v-model="pick" v-bind:value="a"&gt;
// 當選中時
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>