前面的话
本文将详细介绍Vue表单控件绑定
基础用法
可以用 v-model
指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。v-model
本质上不过是语法糖,它负责监听用户的输入事件以更新数据
[注意]v-model
会忽略所有表单元素的value
、checked
、selected
特性的初始值。因为它会选择Vue实例数据来作为具体的值。应该通过JS组件的data
选项中声明初始值
【type:text】
<div id="example">
<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
message:''
}
})
</script>
实际上v-model是:value和@input事件的语法糖
<div id="example">
<input :value="message" placeholder="edit me" @input="message=$event.target.value">
<p>Message is: {{ message }}</p>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
message:''
},
})
</script>
【textarea】
<div id="example">
<div>
<span>Multiline message is:</span>
<p style="white-space: pre-line">{{ message }}</p>
</div>
<textarea v-model="message" placeholder="add multiple lines"></textarea>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
message:''
}
})
</script>
[注意]在文本区域插值( <textarea></textarea>
) 并不会生效,应用 v-model
来代替
【type:checkbox】
<div id="example">
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
checked:false
}
})
</script>
<div id="example">
<div>
<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>
</div>
<div>
<span>Checked names: {{ checkedNames }}</span>
</div>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
checkedNames:[]
}
})
</script>
【type:radio】
<div id="example">
<div>
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
</div>
<div>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
</div>
<div>Picked: {{ picked }}</div>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
picked:''
}
})
</script>
【select】
单选列表
<div id="example">
<select v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
selected: ''
}
})
</script>
[注意]如果v-model
表达初始的值不匹配任何的选项,<select>
元素就会以”未选中”的状态渲染。在iOS中,这会使用户无法选择第一个选项,因为这样的情况下,iOS不会引发change事件。因此,像以上提供disabled选项是建议的做法
多选列表
<div id="example">
<select v-model="selected" multiple>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
selected: []
}
})
</script>
动态选项
用v-for渲染
<div id="example">
<select v-model="selected">
<option v-for="option in options" :value="option.value">
{{ option.text }}
</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
selected: 'A',
options: [
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' }
]
}
})
</script>
绑定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
实现,并且这个属性的值可以不是字符串
【复选框】
<div id="example">
<input type="checkbox" v-model="toggle" :true-value="a" :false-value="b">
<span>{{ toggle }}</span>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
toggle:'',
a:true,
b:false
}
})
</script>
【单选按钮】
<div id="example">
<input type="radio" v-model="pick" :value="a">
<span>{{ pick }}</span>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
pick:'',
a:true
}
})
</script>
【选择列表】
<div id="example">
<select v-model="selected">
<option :value="{ number: 123 }">123</option>
<option :value="{ number: 234 }">234</option>
<option :value="{ number: 345 }">345</option>
</select>
<span>Selected: {{ selected.number }}</span>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
selected:''
}
})
</script>
修饰符
【.lazy】
在默认情况下, v-model
在input
事件中同步输入框的值与数据,但可以添加一个修饰符 lazy
,从而转变为在change
事件中同步
下列例子中,光标移出输入框时,才同步数据
<div id="example">
<input v-model.lazy="message" placeholder="edit me">
<p>Message is: {{ message }}</p>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
message:''
}
})
</script>
【.number】
如果想自动将用户的输入值转为Number类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个修饰符number
给v-model
来处理输入值
这通常很有用,因为在 type="number"
时 HTML 中输入的值也总是会返回字符串类型
<div id="example">
<div>
<input v-model="age1" type="number">
<span>{{type1}}</span>
<p>普通输入: {{ age1 }}</p>
</div>
<div>
<input v-model.number="age2" type="number">
<span>{{type2}}</span>
<p>number修饰符输入: {{ age2 }}</p>
</div>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
age1:'',
age2:'',
},
computed:{
type1:function(){
return typeof(this.age1)
},
type2:function(val){
return typeof(this.age2)
},
}
})
</script>
【.trim】
如果要自动过滤用户输入的首尾空格,可以添加 trim
修饰符到 v-model
上过滤输入
<div id="example">
<input v-model.trim="msg">
<p>msg is: {{ msg }}</p>
</div>
<script>
var example = new Vue({
el: '#example',
data:{
msg:''
}
})
</script>
Vue表单控件绑定的更多相关文章
-
Vue#表单控件绑定
使用v-model 在表单控件上实现数据双向绑定. 单选:https://jsfiddle.net/miloer/bs49p0fx/ <input type="checkbox&quo ...
-
vue表单控件绑定(表单数据的自动收集)
v-model指令 你可以用 v-model 指令在表单控件元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素.尽管有些神奇 但 v-model 本质上不过是语法糖,它负责监听用户的 ...
-
vue.js基础知识篇(3):计算属性、表单控件绑定
第四章:计算属性 为了避免过多的逻辑造成模板的臃肿不堪,可使用计算属性来简化逻辑. 1.什么是计算属性 <!DOCTYPE html><html lang="en" ...
-
表单控件绑定v-model
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
-
vue2.0 之表单控件绑定
表单控件绑定v-model 1.文本 <template> <div> <input type="text" name="" v- ...
-
Vue.js学习 Item9 – 表单控件绑定
基础用法 可以用 v-model 指令在表单控件元素上创建双向数据绑定.根据控件类型它自动选取正确的方法更新元素.尽管有点神奇,v-model 不过是语法糖,在用户输入事件中更新数据,以及特别处理一些 ...
-
vue v-model 表单控件绑定
v-model 指令在表单控件元素上创建双向数据绑定,下面一一进行示例解释. 1.v-model 双向绑定文本 <!DOCTYPE html> <html> <head ...
-
Vue.js-----轻量高效的MVVM框架(七、表单控件绑定)
话不多说,先上完整代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
-
Vue.js学习笔记 第七篇 表单控件绑定
本篇主要说明表单控件的数据绑定,这次没有新的知识点 文本框 1.普通文本框 <div id="app-1"> <p><input v-model=&q ...
随机推荐
-
Windows Server 2003安装方法
1. 设置BIOS,从光驱引导启动.光盘放入光驱,自动读盘,选择第一项“安装Windows Server 2003,Enterprise Bdition”: 2. 弹出加载安装文件界面. 3. 出现安 ...
-
[大数据之Sqoop] —— Sqoop初探
Sqoop是一款用于把关系型数据库中的数据导入到hdfs中或者hive中的工具,当然也支持把数据从hdfs或者hive导入到关系型数据库中. Sqoop也是基于Mapreduce来做的数据导入. 关于 ...
-
high三个晚上这样好么-JSON&;PHP
hi 昨晚上吃火锅去了,对,你没猜错,我就是在成都 今晚有师兄请客,明天有基友请吃火锅,本来该忙忙哒的这一周要连续high三个晚上么(单身研究生狗就是这么容易满足).所以只好不务正业写写写了(写不动了 ...
-
前端Html和Css面试题
前端Html和Css面试题Html篇:1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 Safari:webkit内核 Ope ...
-
TeamCity配置笔记
1.编译sln 2.发布网站 3.重复代码检测 4.代码分析 5.单元测试&覆盖率测试 查看代码覆盖率 7.代码签入时自动触发编译 8.通知 1.在teamcity安装目录中找到TrayNot ...
-
HDU 2122 HDU Today【Floyd】
题意:给出n条路,起点和终点,问最短距离 用map处理一下地名,再用floyd 可是不懂的是:为什么INF定义成0x7fffffff就输出一堆奇怪的东西,改成100000000就可以了 #includ ...
-
php cURL library is not loaded
问题: php 在命令行里面可以找到 curl 模块,但是用apache 没有找到 curl 模块. 表现内容为: extension_loaded('curl')cURL library is no ...
-
matlab norm 范式
格式:n=norm(A,p) 功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 p 返回值 1 返回A中最大一列和,即max(sum(abs(A))) 2 返回A的 ...
-
数据分析——pandas
简介 import pandas as pd # 在数据挖掘前一个数据分析.筛选.清理的多功能工具 ''' pandas 可以读入excel.csv等文件:可以创建Series序列,DataFrame ...
-
关于为什么会涉足easyui
之前公司需要做一款类似于报价系统的功能,涉及到表单以及报表的统计, 这时分配给我,PHP也要开始弄easyui了 就这样走上了前端的路? 还挺感谢这些时间,有精力来学习额外的东西 不学习就会落后,ヾ( ...