Vue基礎:vue表單輸入綁定

基礎用法

用 v-model 指令在表單 <input><textarea><select> 元素上創建雙向數據綁定。它會根據控件類型自動選取正確的方法來更新元素。儘管有些神奇,但 v-model 本質上不過是語法糖。它負責監聽用戶的輸入事件以更新數據,並對一些極端場景進行一些特殊處理。

注意:v-model 會忽略所有表單元素的 valuecheckedselected attribute 的初始值而總是將 Vue 實例的數據作爲數據來源。 應該通過 JavaScript 在組件的 data 選項中聲明初始值。

v-model 在內部爲不同的輸入元素使用不同的屬性並拋出不同的事件:

texttextarea 元素使用 value 屬性和 input 事件;
checkboxradio 使用 checked 屬性和 change 事件;
select 字段將 value 作爲 prop 並將 change 作爲事件。

1、文本

<div id="app">
   <input type="text" placeholder="edit me" v-model="message" />
   <p>輸入信息爲:{{message}}</p>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
     message:''
    }
   })
  </script>

在這裏插入圖片描述
2、多行文本

<div id="app">
   <p>留言本:{{message}}</p>
   <textarea rows="15" cols="60" placeholder="請輸入留言" v-model="message">    </textarea>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
     message:''
    }
   })
  </script>

在這裏插入圖片描述
3、複選框

(1)單個複選框,綁定到布爾值:

<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>

在這裏插入圖片描述

(2)多個複選框,綁定到同一個數組:

<div id='app'>
    <input type="checkbox" id="apple" value="apple" v-model="checkedNames">
    <label for="apple">蘋果</label>
    <input type="checkbox" id="grape" value="grape" v-model="checkedNames">
    <label for="grape">葡萄</label>
    <input type="checkbox" id="watermelon" value="watermelon" v-model="checkedNames">
    <label for="watermelon">西瓜</label>
    <br>
    <span>你的選擇: {{ checkedNames }}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
      checkedNames: []
    }
   })
  </script>

在這裏插入圖片描述

4、單選按鈕

<div id="app">
    <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 }}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
       picked: ''
    }
   })
  </script>

在這裏插入圖片描述
5、選擇框

(1)單選時:

<div id="app">
    <select v-model="selected">
      <option disabled value="">請選擇</option>
      <option>A</option>
      <option>B</option>
      <option>C</option>
    </select>
    <span>你的選擇: {{ selected }}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
       selected: ''
    }
   })
  </script>

在這裏插入圖片描述
(2)多選時 (綁定到一個數組):

<div id="app">
   <select v-model="selected" multiple style="width: 50px;">
       <option>A</option>
       <option>B</option>
       <option>C</option>
     </select>
     <br>
     <span>你的選擇: {{ selected }}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
       selected: []
    }
   })
  </script>

在這裏插入圖片描述
(3)用 v-for 渲染的動態選項:

<div id="app">
   <select v-model="selected">
     <option v-for="option in options" v-bind:value="option.value">
       {{ option.text }}
     </option>
   </select>
   <span>已選擇: {{ selected }}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
     selected: 'A',
         options: [
           { text: 'One', value: 'A' },
           { text: 'Two', value: 'B' },
           { text: 'Three', value: 'C' }
         ]
    }
   })
  </script>

在這裏插入圖片描述

值綁定

對於單選按鈕,複選框及選擇框的選項,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">
發佈了132 篇原創文章 · 獲贊 26 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章