1. 程式人生 > >Vue input控制元件通過value繫結動態屬性及修飾符

Vue input控制元件通過value繫結動態屬性及修飾符

對於單選按鈕,勾選框及選擇列表選項, v-model 繫結的 value 通常是靜態字串(對於勾選框是邏輯值):

<!-- 當選中時,`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 實現,並且這個屬性的值可以不是字串。

舉個最容易認知的例子

<input type="radio" v-model="pick" v-bind:value="a">
//當只有v-model的情況下,我們綁定了VUE例項中的pick這個資料,而這資料往往都是字串或者是邏輯值,而如今通過v-bind繫結value,意味著,value是一個可變的資料 a,而不是字串'a'
,而v-model在這個控制元件選定後的值就是指向value,而用v-bind繫結後,指向的值又是一個動態屬性,所以此時就可以通過a這個動態屬性來更改v-model繫結的值,其他的控制元件也是如此,比如select等 // 當選中時 vm.pick === vm.a

.lazy

在預設情況下, v-model 在 input 事件中同步輸入框的值與資料 (除了 上述 IME 部分),但你可以新增一個修飾符 lazy ,從而轉變為在 change 事件中同步:
//測試是在失去焦點的時候才更新,而不是實時更新

<input v-model.lazy="msg" >
.number

如果想自動將使用者的輸入值轉為 Number 型別(如果原值的轉換結果為 NaN 則返回原值),可以新增一個修飾符 number 給 v-model 來處理輸入值:

<input v-model.number="age" type="number">
{{typeof age}}//如果輸入的是字串則是string,如果是數字字串則轉換成number

這通常很有用,因為在 type=”number” 時 HTML 中輸入的值也總是會返回字串型別。
.trim

如果要自動過濾使用者輸入的首尾空格,可以新增 trim 修飾符到 v-model 上過濾輸入:

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