vue基礎內容總結(十一)

表單輸入綁定

基礎用法

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

 

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

 

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

.text和textarea 元素使用 value 屬性和 input 事件;

.checkbox 和 radio 使用 checked 屬性和 change 事件;

.select 字段將 value 作爲 prop 並將 change 作爲事件。

 

注意:對於需要使用輸入法 (如中文、日文、韓文等) 的語言,你會發現 v-model 不會在輸入法組合文字過程中得到更新。如果你也想處理這個過程,請使用 input 事件。

 

文本

單行文本和多行文本

在文本區域插值 (<textarea>{{text}}</textarea>) 並不會生效,應用 v-modle 來代替。

 

複選框

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

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

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

 

單選按鈕:

 

選擇框

單選時:

注意:如果 v-model 表達式的初始值未能匹配任何選項, <select> 元素將被渲染爲“未選中”狀態。在 IOS 中,這會使用戶無法選擇第一個選項。因爲這樣的情況下,ISO 不會觸發 change 事件。因此,更推薦像上面這樣提供一個值爲空的禁用選項。

 

多選時(綁定到一個數組):

 

用 v-for 渲染的動態選項:

值綁定

對於單選按鈕,複選框及選擇框的選項, 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 實現,並且這個屬性的值可以不是字符串。

 

複選框

<input
  type="checkbox"
  v-model="toggle"
  true-value="yes"
  false-value="no"
>
// 當選中時
vm.toggle === 'yes'
// 當沒有選中時
vm.toggle === 'no'

注意:這裏的 tru-value 和 false-value 特性並不會影響輸入控件的 value 特性,因爲瀏覽器在提交表單時並不會包含未被選中的複選框。如果要確保表單中這兩個值中的一個能夠被提交,(比如“yes”或“no”),請換用單選按鈕。

 

 

單選按鈕

<input type="radio" v-model="pick" v-bind:value="a">
// 當選中時
vm.pick 

選擇框的選項

<select v-model="selected">
    <!-- 內聯對象字面量 -->
  <option v-bind:value="{ number: 123 }">123</option>
</select>
// 當選中時
typeof vm.selected // => 'object'
vm.selected.number // => 123

修飾符

 .lazy

在默認情況下, v-model 在每次 input 事件觸發後將輸入框的值與數據進行同步(除了上述輸入法組合文字時),你可以添加 lazy 修飾符,從而轉變爲使用 change 事件進行同步:

<!-- 在“change”時而非“input”時更新 -->
<input v-model.lazy="msg" >

 

.number

如果想自動將用戶的輸入值轉爲數值類型,可以給 v-model 添加 number 修飾符:

<input v-model.number="age" type="numb

.trim

如果要自動過濾用戶輸入的首尾空白字符,可以給 v-model 添加 trim 修飾符:

<input v-model.trim="msg">

 

在組件上使用 v-model

HTML 原生的輸入元素類型總是不能滿足需求。幸好, Vue 的組件系統會允許你創建具有完全自定義行爲且可複用的輸入組件。這些輸入組件甚至可以和 v-model 一起使用!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章