初學vue2.0-表單控件綁定-文檔理解筆記v1.0

表單控件綁定

基礎語法

  • v-model 指令在表單控件元素上建立雙向數據綁定。它會根據控件類型自動選取正確的方法來更新元素html

  • v-model 並不關心表單控件初始化所生成的值。由於它會選擇 Vue 實例數據來做爲具體的值。vue

<!--單行-->
<!--直接綁定變量,這個變量須要在vue實例裏面的-->
<div id="aa">
    <input v-model="message" placeholder="edit me">
    <p>Message is: {{ message }}</p>
</div>
<script src="js/vue.js"></script> //引用vue
<script>
    new Vue({
        el: '#aa', //vue實例
        data: {
            message: '' //須要有一個作雙向綁定的變量
        }
    })
</script>
<!--多行textarea,其實相似單行-->
<span>Multiline message is:</span>
<p style="white-space: pre">{{ message }}</p>
<br>
<textarea v-model="message" placeholder="add multiple lines"></textarea>
<!--單選,相似單行,不過須要注意的是他們使用同一個v-modal-->
<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>
<!--選擇列表,相似單行-->
<select v-model="selected">
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>Selected: {{ selected }}</span>

多選框須要有一個數組存放選項值react

<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>
new Vue({
  el: '...',  
  data: {
    checkedNames: []  //須要有一個數組存放選項值 
  }
})

多選列表chrome

<select v-model="selected" multiple>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<br>
<span>Selected: {{ selected }}</span>

輸出的話若是不作處理,默認是輸出一個數組,一個選項爲一個數組元素,例如["A","B"]數組

動態選項

<select v-model="selected">
<!--用v-for遍歷-->
<!--v-bind綁定value(這是select元素的value)對應遍歷項的value屬性(這是data數據裏面options數組裏面的屬性value)-->
  <option v-for="option in options" v-bind:value="option.value">
    {{ option.text }}
  </option>
</select>
<span>Selected: {{ selected }}</span>
new Vue({
  el: '...',
  data: {
    selected: 'A',
    options: [
      { text: 'One', value: 'A' },
      { text: 'Two', value: 'B' },
      { text: 'Three', value: 'C' }
    ]
  }
})
 Selected: A
  1. 首先v-for循環是遍歷options數組,每一項是一個對象option,裏面有text和value屬性app

  2. 而後將該DOM元素的value值綁定爲option的value值,那麼vue就會使用這個value值做爲每個選項的值(v-model並不關心表單控件初始化所生成的值。由於它會選擇 Vue 實例數據來做爲具體的值)spa

  3. 那麼,遍歷輸出了3個選項,每一個選項的value都是option.value,因此實現了生成動態選項的目的,至關於作了映射,經過一個value值雙向綁定

綁定value

對於單選按鈕,勾選框及選擇列表選項, v-model 綁定的 value 一般是靜態字符串(對於勾選框是邏輯值)即綁定的是html元素的value值code

<!-- 當選中時,`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>

有時咱們想綁定 value 到 Vue 實例的一個動態屬性上,這時能夠用 v-bind 實現,而且這個屬性的值能夠不是字符串。server

<div id="ooo">
<!--v-model綁定的是一個toggle變量,這個變量會返回的true或者false(本身設定的,能夠是返回別的)-->
<!--分別綁定2個DOM值(動態值)的值爲數據a,b的值-->
    <input
            type="checkbox"
            v-model="toggle"              
            v-bind:true-value="a" 
            v-bind:false-value="b"
    >
</div>
var app2 = new Vue({
        el: '#ooo',
        data: {
            toggle: '', // 默認設置是'',勾選以後由於會切換到true-value的值,因此結果是true(按順序切換)
            a: true,
            b: false
        }
    })
//驗證:在chrome dev tools的console
//頁面打開初始化
app2.toggle
""
//沒勾選
app2.toggle
false
//已勾選
app2.toggle
true
  1. 當頁面打開初始化的時候,是空字符串""

  2. 當勾選的時候,vue會按順序切換到綁定的值上面,true-value是排在前的,因此會切換到使用這個值,而後這個值對應的是a的true

  3. 當沒勾選的時候,vue會切換到false-value,因此是b的false

<div id="ooo">
    <select v-model="selected">
        <!-- 內聯對象字面量 -->
        <!--value綁定的是一個數組對象-->
        <option v-bind:value="{ number: 123 }">123</option>
    </select>
</div>
var app2 = new Vue({
        el: '#ooo',
        data: {
            selected:[] 
        }
    })
//初始化的時候
app2.selected
[]
//當選中的時候,輸出是一個對象,因此須要再次調用對象的屬性才能獲取值
app2.selected
Object {__ob__: Observer}__ob__: Observernumber: (...)get number: reactiveGetter()set number: reactiveSetter(newVal)__proto__: Object
//當選中的時候
app2.selected.number
123

修飾符

.lazy
在默認狀況下, v-model 在 input 事件中同步輸入框的值與數據,即輸入內容就會處理內容(除了上述 IME 部分),但你能夠添加一個修飾符 lazy ,從而轉變爲在 change 事件中同步,即輸入完成後纔出發事件處理:

<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model.lazy="msg" >

.number
若是想自動將用戶的輸入值轉爲 Number 類型(若是原值的轉換結果爲 NaN 則返回原值),能夠添加一個修飾符 number 給 v-model 來處理輸入值:

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

.trim
若是要自動過濾用戶輸入的首尾空格,能夠添加 trim 修飾符到 v-model 上過濾輸入:

<input v-model.trim="msg">
相關文章
相關標籤/搜索