Vue.js 中的 v-model 指令及绑定表单元素的方法


Posted in Javascript onDecember 03, 2018

我们可以使用 Vue.js 中的 v-model 指令来完成表单数据的双向绑定。

1 基础用法

1.1 文本输入框(text)

这里演示了在文本输入框上输入的内容,会实时映射到绑定的数据上。

html:

<div id="app">
 <input type="text" v-model="content" placeholder="请输入">
 <p>输入框:{{content}}</p>
</div>

js:

<script>
 var app = new Vue({
  el: '#app',
  data: {
   content: ''
  }
 });
</script>

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

1.2 大文本输入框(textarea)

绑定方法与文本输入框相同。

html:

<div id="app2">
 <textarea v-model="content" placeholder="请输入"></textarea>
 <p>内容:</p>
 <p style="white-space: pre">{{content}}</p>
</div>

js:

var app2 = new Vue({
 el: '#app2',
 data: {
  content: ''
 }
});

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

这里对展示的内容所对应的 <p> 元素加了 white-space: pre 样式,这样内容即使带有回车符也会保留。

--------------------------------------------------------------------------------

注意:表单控件所显示的值只依赖于所绑定的数据,所以即便设置了表单控件中的 value值,也不会起作用哦。同理,<textarea>xxx</textarea>之间的值也无效。

之前的示例我们可以发现,使用中文输入法时,只有确定选中的词语,才会被如果 Vue.js 所更新。如果希望输入的内容实时更新,那么可以使用 @input。

html:

<div id="app3">
 <textarea @input="inputHandler" placeholder="请输入"></textarea>
 <p>内容:</p>
 <p style="white-space: pre">{{content}}</p>
</div>

js:

var app3 = new Vue({
 el: '#app3',
 data: {
  content: ''
 },
 methods: {
  inputHandler: function (event) {
   this.content = event.target.value;
  }
 }
});

可以看出,即使在 @input 定义的函数不带参数,Vue.js 也会在定义的函数(示例中的 inputHandler)中传入 event 原生事件对象。

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

1.3 单选框

单选框一般都有多个条件可供选择,既然是单选框,自然希望实现互斥效果,我们可以使用 v-model 指令配合单选框的 value 来实现。

html:

<div id="app4">
 <input id="radio1" type="radio" v-model="checked" value="文学">
 <label for="radio1">文学</label>
 <input id="radio2" type="radio" v-model="checked" value="艺术">
 <label for="radio2">艺术</label>
 <input id="radio3" type="radio" v-model="checked" value="经济">
 <label for="radio3">经济</label>
 <br>
 <p>选择了:{{checked}}</p>
</div>

js:

var app4 = new Vue({
 el: '#app4',
 data: {
  checked: '文学'
 }
});

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

1.4 复选框

复选框的绑定方式与单选框相同,只不过复选框所对应的数据类型是数组罢了。

html:

<div id="app5">
 <input id="checkbox1" type="checkbox" v-model="checked" value="文学">
 <label for="checkbox1">文学</label>
 <input id="checkbox2" type="checkbox" v-model="checked" value="艺术">
 <label for="checkbox2">艺术</label>
 <input id="checkbox3" type="checkbox" v-model="checked" value="经济">
 <label for="checkbox3">经济</label>
 <br>
 <p>选择了:{{checked}}</p>
</div>

js:

var app5= new Vue({
 el: '#app5',
 data: {
  checked: ['文学','艺术']
 }
});

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

1.5 下拉选择框

1.5.1 单选

html:

<div id="app6">
 <select v-model="selected">
  <option value="1">文学</option>
  <option value="2">艺术</option>
  <option>经济</option>
 </select>
 <br>
 <p>选择了:{{selected}}</p>
</div>

js:

var app6 = new Vue({
 el: '#app6',
 data: {
  selected: '1'
 }
});

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

可以看出,如果 <option> 含有 value 值,则会先匹配该值;如果没有,则匹配 <option> 中的 text 值(比如示例中的 <option>经济</option>)。

1.5.2 多选

为 <select> 标签添加 multiple 属性,即可实现多选。

html:

<div id="app7">
 <select v-model="selected" multiple>
  <option value="1">文学</option>
  <option value="2">艺术</option>
  <option>经济</option>
 </select>
 <br>
 <p>选择了:{{selected}}</p>
</div>

Vue.js 中的 v-model 指令及绑定表单元素的方法

在实际应用场景,<select> 标签中的 <opinion> 一般是通过 v-for 指令动态输出的,其中每一项的 value 或 text 都可以使用 v-bind 动态输出的。

html:

<div id="app8">
 <select v-model="selected">
  <option v-for="option in options"
     :value="option.value">{{option.text}}
  </option>
 </select>
 <br>
 <p>选择了:{{selected}}</p>
</div>

js:

var app8 = new Vue({
 el: '#app8',
 data: {
  selected: '1',
  options: [
   {text: '文学', value: '1'},
   {text: '艺术', value: '2'}
  ]
 }
});

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

--------------------------------------------------------------------------------

因为 select 标签的呈现样式依赖于浏览器,所以在实际业务场景中,我们更多的是使用 div 来模拟 select 标签的列表功能,而这可以通过使用 Vue.js 自定义组件的方式来实现一个通用的下拉选择组件。

以上示例 DEMO

2 绑定动态变量

之前所说的示例,v-model 绑定的都是静态变量。我们可以使用 v-bind 来绑定动态变量。

2.1 单选框

html:

<div id="app">
 <input id="radio1" type="radio" v-model="picked" :value="value">
 <label for="radio1">文学</label>
 <input id="radio2" type="radio" v-model="picked" :value="value2">
 <label for="radio2">艺术</label>
 <input id="radio3" type="radio" v-model="picked" :value="value3">
 <label for="radio3">经济</label>
 <br>
 <p>{{picked}}</p>
 <p>{{value}},{{value2}},{{value3}}</p>
</div>

js:

var app = new Vue({
 el: '#app',
 data: {
  picked: false,
  value: '文学',
  value2: '艺术',
  value3: '经济',
 }
});

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

示例中定义的单选框默认值为 picked 所定义的 false。当选中某个单选框时,则动态绑定在 :value 中定义的变量。

2.2 复选框

html:

<div id="app2">
 <input id="checkbox" type="checkbox" v-model="checked" :true-value="value1" :false-value="value2">
 <label for="checkbox">开关</label>
 <p>checked:{{checked}}</p>
 <p>value1:{{value1}}</p>
 <p>value2:{{value2}}</p>
</div>

js:

var app2 = new Vue({
 el: '#app2',
 data: {
  value1: '亮',
  value2: '暗',
  checked: ''
 }
});

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

复选框的默认值绑定的是 v-model 定义的变量,而勾选与取消勾选所绑定的值,则分别由 :true-value 与 false-value 来实现动态绑定。

2.3 下拉选择框

html:

<div id="app3">
 <select v-model="selected">
  <option :value="{number:1}">文学</option>
  <option :value="{number:2}">艺术</option>
 </select>
 <br>
 <p>选择了:{{selected.number}}</p>
</div>

js:

var app3 = new Vue({
 el: '#app3',
 data: {
  selected: ''
 }
});

效果:

Vue.js 中的 v-model 指令及绑定表单元素的方法

当选中某个 option 时,app3.selected 为 Object,所以 selected.number 即为 :value 定义的绑定值。

以上示例 DEMO

Javascript 相关文章推荐
基于jQuery的Spin Button自定义文本框数值自增或自减
Jul 17 Javascript
JavaScript学习笔记记录我的旅程
May 23 Javascript
JSON+HTML实现国家省市联动选择效果
May 18 Javascript
jQuery实现平滑滚动的标签分栏切换效果
Aug 28 Javascript
js验证身份证号有效性并提示对应信息
Oct 19 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
JS只能输入正整数的简单实例
Oct 07 Javascript
微信小程序 网络请求(GET请求)详解
Nov 16 Javascript
Bootstrap实现各种进度条样式详解
Apr 13 Javascript
浏览器调试动态js脚本的方法(图解)
Jan 19 Javascript
js实现自定义右键菜单
May 18 Javascript
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
ng-zorro-antd 入门初体验
Dec 03 #Javascript
如何使用 vue + d3 画一棵树
Dec 03 #Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 #Javascript
浅谈ng-zorro使用心得
Dec 03 #Javascript
JS跨域请求的问题解析
Dec 03 #Javascript
VueJS 组件参数名命名与组件属性转化问题
Dec 03 #Javascript
Vue.Draggable拖拽功能的配置使用方法
Jul 29 #Javascript
You might like
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
做web开发 先学JavaScript
2014/12/12 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
python实现微信小程序自动回复
2018/09/10 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
Python的log日志功能及设置方法
2019/07/11 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
parser.add_argument中的action使用
2020/04/20 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
厨房工作人员岗位职责
2013/11/15 职场文书
感恩节活动方案
2014/01/27 职场文书
商铺门面租房协议书
2014/10/21 职场文书
骨干教师考核评语
2014/12/31 职场文书
vue elementUI表格控制对应列
2022/04/13 Vue.js
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技