v-model


僅用於以下控件:

  • <input>
  • <select>
  • <textarea>
  • 組件

v-model以Vue 實例的數據作為數據來源,應當在組件的 data 選項中聲明初始值,之后通過監聽用戶的輸入事件以更新數據,並對一些極端場景進行一些特殊處理。

在表單控件上使用v-model

v-model根據不同的控件類型,使用不同的屬性作為輸入並拋出不同的事件:

  • text 和 textarea 元素使用 value 屬性和 input 事件
  • checkbox 和 radio ,單個選項使用checked屬性,多個選項,輸出value屬性的數組,事件使用 change 
  • select 字段將 value 作為 prop 並將 change 作為事件。

1、text 和 textarea 元素綁定value 屬性和 input 事件:

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

監聽用戶的輸入,並將value的值給message,所以,當用戶有輸入時,p標簽里的{{ message }}會實時顯示用戶的輸入

注意,在<textarea></textarea>中使用插值不會生效,而是給它綁定v-model,在另外的地方輸出對應的value。

2、checkbox 復選框:單個選項綁定checked屬性,多個選項綁定value屬性到一個數組,事件為 change

3、radio單選按鈕:

4、select選擇框:
(1)只可單選時,綁定選項的value值

 

 

(2)可多選時,綁定value到一個數組

5、在組件上使用v-moel

組件上的 v-model 默認使用名為 value 的 prop 和名為 input 的事件。

組件的input事件通過組件內部輸入框的input事件提交$emit,手動觸發。

所以為了保持組件內input的value和input和組件的保持一致,組件內的 <input> 必須:

  •  value 使用作為prop 的value
  •  input 綁定到組件的input事件
<custom-input v-model="searchText"></custom-input>
//相當於
<custom-input
  :value="searchText"
  @input="searchText = $event"
></custom-input>

//對應的input
Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input
      :value="value"
      @input="$emit('input', $event.target.value)"
    >
  `
})

以上是v-model的默認操作,但是像復選框用作單個選項這種使用checked屬性而不是value屬性,可以用實例的model 選項重新定義默認的prop和事件:

Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    <input
      type="checkbox"
      :checked="checked"
      :change="$emit('change', $event.target.checked)"
    >
  `
})

 

v-model修飾符

 .lazy:默認情況下(沒有指定input的type),觸發input 事件將輸入框的值與數據進行同步,給v-model添加 lazy 修飾符,轉變為使用 change 事件進行同步:

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

.number:將用戶的輸入值轉為數值類型,因為即使在 type="number" 時,HTML 輸入元素的值也會是字符串。

.trim:過濾用戶輸入的首尾空白字符


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM