12-Vue基本语法介绍九
这一节介绍有关表单元素,表单输入的基本知识,
加油加油!!
表单输入绑定
基础用法
用v-model
在表单<input><textarea><select>
元素上创建双向数据绑定
注意:
v-model 会忽略所有表单元素的 value、checked、selected
特性的初始值而总是将 Vue 实例的数据作为数据来源。
你应该通过 JavaScript 在组件的 data 选项中声明初始值。
在文本区域插值 (<textarea>{{text}}</textarea>
) 并不会生效,应用 v-model 来代替。
文本
1 | <input v-model="message" placeholder="edit me"> |
1 | <span>Multiline message is:</span> |
复选框
单个复选框,绑定到布尔值:
1 | <input type="checkbox" id="checkbox" v-model="checked"> |
多个复选框,绑定到同一个数组:
1 | <div id='example-3'> |
1 | new Vue({ |
单选按钮
1 | <div id="example-4"> |
1 | new Vue({ |
选择框
- 单选时
1
2
3
4
5
6
7
8
9<div id="example-5">
<select v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>如果1
2
3
4
5
6new Vue({
el: '...',
data: {
selected: ''
}
})v-model
表达式的初始值未能匹配任何选项,<select>
元素将被渲染为“未选中”状态。
在 iOS 中,这会使用户无法选择第一个选项。因为这样的情况下,iOS 不会触发 change 事件。
因此,更推荐像上面这样提供一个值为空的禁用选项。
- 多选时
1
2
3
4
5
6
7
8
9<div id="example-6">
<select v-model="selected" multiple style="width: 50px;">
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<br>
<span>Selected: {{ selected }}</span>
</div>也可以用1
2
3
4
5
6
7new Vue({
el: '#example-6',
data: {
selected: []
}
})
//拖动才能多选v-for
来循环1
2
3
4
5
6<select v-model="selected">
<option v-for="option in options" v-bind:value="option.value">
{{ option.text }}
</option>
</select>
<span>Selected: {{ selected }}</span>1
2
3
4
5
6
7
8
9
10
11new Vue({
el: '...',
data: {
selected: 'A',
options: [
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' }
]
}
})
值绑定
对于单选按钮,复选框及选择框的选项,v-model 绑定的值通常是静态字符串 (对于复选框也可以是布尔值):
1 | <!-- 当选中时,`picked` 为字符串 "a" --> |
但有时我们可能想把值绑定在Vue实例的一个动态属性,可以用v-bind
实现
复选框
1 | <input |
1 | // 当选中时 |
单选按钮
1 | <input type="radio" v-model="pick" v-bind:value="a"> |
1 | // 当选中时 |
选择框的选项
1 | <select v-model="selected"> |
1 | // 当选中时 |
修饰符
.lazy
在默认情况下,v-model
在每次 input
事件触发后 将输入框的值与数据进行同步 (除了上述输入法组合文字时)。
你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:
1 | <!-- 在“change”时而非“input”时更新 --> |
.number
如果想自动将用户的输入值转为数值类型,可以给 v-model
添加 number
修饰符:
1 | <input v-model.number="age" type="number"> |
.trim
如果要自动过滤用户输入的首尾空白字符,可以给 v-model
添加 trim 修饰符:
1 | <input v-model.trim="msg"> |