视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Vue表单输入绑定的示例代码
2020-11-27 22:05:38 责编:小采
文档


基础用法

你可以用v-model指令在表单input,textarea以及select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但是v-model本质上不过是语法糖。它负责监听用户的输入事件以更新数据。

v-model会忽略所有表单元素的value, checked, selected特性的初始值而总是将Vue实例的数据作为数据来源。你应该通过JavaScript在组件的data选项中声明初始值。

(1) 文本

<input v-model="message" placehoder="edit me">

(2) 多行文本

<textarea v-model="message"></textarea>

(3) 复选框

单个复选框,绑定到布尔值:

<input type="checkbox" v-model="checked">

多个复选框,绑定到同一个数组:

<div id='example-3'>
 <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>
</div>

new Vue({
 el: '#example-3',
 data: {
 checkedNames: []
 }
})

(4) 单选按钮

<div id="example-4">
 <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>
</div>

new Vue({
 el: '#example-4',
 data: {
 picked: ''
 }
})

(5) 选择框

单选时:

<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>

new Vue({
 el: '...',
 data: {
 selected: ''
 }
})

如果 v-model 表达式的初始值未能匹配任何选项,<select> 元素将被渲染为“未选中”状态。在 iOS 中,这会使用户无法选择第一个选项。因为这样的情况下,iOS 不会触发 change 事件。因此,更推荐像上面这样提供一个值为空的禁用选项。

多选时(绑定到一个数组)

<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>

new Vue({
 el: '#example-6',
 data: {
 selected: []
 }
})

值绑定

对于单选按钮,复选框以及选择框的选项,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>

(1) 复选框

<input
 type="checkbox"
 v-model="toggle"
 true-value="yes"
 false-value="no"
>

这里的 true-value 和 false-value 特性并不会影响输入控件的 value 特性,因为浏览器在提交表单时并不会包含未被选中的复选框。如果要确保表单中这两个值中的一个能够被提交,(比如“yes”或“no”),请换用单选按钮。

(2) 单选按钮

<input type="radio" v-model="pick" v-bind:value="a">
// 当选中时
vm.pick === vm.a

修饰符

(1) .lazy

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:

(2) .number

如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符

(3) trim

如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

示例:

 // >>>>>>> html
 <div id="app" >
 <!-- 输入框绑定 -->
 <input v-model='massage' placeholder="输入信息" >
 <p>massage is:{{ massage }}</p>
 <hr>
 <!-- 单个选框绑定,返回值为布尔值 -->
 <p>单个选框绑定,返回值为布尔值:</p>
 <input v-model='radioStatus' type="checkbox" name="isAgree">
 <br>
 <label>数据:{{radioStatus}}</label>

 <hr>
 <!-- 多个选框绑定到同一个数据 -->
 <div>
 <p> 多个选框绑定同一个数据: </p>
 <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>
 <!-- checkedNames 为一个数组 [] -->
 <span>数据: {{ checkedNames }}</span> 
 </div>
 <hr>
 <div>
 <p>单选按钮数据:</p>
 <input type="radio" id="one" value="1" v-model="sex"><label for="one">{{stantic.garder[1]}}</label>
 <input type="radio" id="two" value="2" v-model="sex"><label for="two">{{ stantic.garder[2] }}</label>
 <input type="radio" id="three" value="3" v-model="sex"><label for="three">{{ stantic.garder[3] }}</label> 
 <br>
 <!-- sex === 选中的input的value -->
 <span>性别代码: {{ sex }};性别:{{stantic.garder[sex]}}</span>
 </div>
 <hr>
 <div>
 <p>选择列表:</p>
 <select v-model="selected">
 <option disabled value="">请选择</option>
 <option value="001" >北京</option>
 <option value="003" >天津</option>
 <option value="008" >上海</option>
 </select>
 <span>Selected: {{ selected }}</span> 
 </div>
 <hr>
 <div>
 <h3>值绑定:</h3>
 <p>
 对于单选按钮,勾选框及选择列表选项,v-model 绑定的 value 通常是静态字符串 (对于勾选框是逻辑值): 
 <br>
 但是有时我们想绑定 value 到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这个属性的值可以不是字符串。

 </p>
 <!-- vm.toggle 和 vm.stantic.isOrNot 绑定 -->
 <label>是否毕业:</label>
 <input type="checkbox" name="" v-model='toggle' v-bind:true-value=stantic.isOrNot[1] v-bind:false-value=stantic.isOrNot[0] >
 <!-- 选中时 vm.toggle === stantic.isOrNot[1] 未选中时 vm.toggle === stantic.isOrNot[0] -->
 <p>您选择了:{{toggle}}</p>
 
 <h4>选择列表的值绑定字面量对象:</h4> 
 <select v-model="selected2">
 <!-- 内联对象字面量 -->
 <option v-bind:value="{ number: 123 }">123</option>
 <option v-bind:value="{ number: 456 }">456</option>
 <option v-bind:value="{ number: 7 }">7</option>
 </select>
 <span>vm.selected={{selected2}}</span>
 </div>
 <hr>
 <div>
 <h3>修饰符</h3>
 
 <h4>.lazy</h4>
 <p>在默认情况下,v-model 在 <mark>input</mark> 事件中同步输入框的值与数据 (除了 上述 IME 部分),但你可以添加一个修饰符 lazy ,从而转变为在 <mark>change</mark> 事件中同步:</p>
 <input v-model.lazy='massage' >
 <p>输入完成,信息改变:{{massage}}</p>
 
 <h4>.number</h4>
 <p>如果想自动将用户的输入值转为 Number 类型 (如果原值的转换
结果为 NaN 则返回原值),可以添加一个修饰符 number 给 v-model 来处理输入值:</p> <!-- vm.age的值类型是Number --> <input type="number" v-model.number='age' > <span>类型为:{{ typeof age }}</span> <h4>.trim</h4> <p>如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入:</p> <input v-model.trim='massage' > </div> </div> // >>>>>>js // 基础用法 v-model let vm = new Vue({ el:'#app', data:{ massage:'', radioStatus:false, checkedNames:[], sex:'', age:'', toggle:'', selected:'', selected2:'', stantic:{ garder:{ 1:'男', 2:'女', 3:'不确定' }, Hobbies:{ 1:'电影', 2:'美食', 3:'游戏', 4:'科技' }, isOrNot:{ 1:'是', 0:'否' } } } });

下载本文
显示全文
专题