Vue.js每天必学之表单控件绑定


Posted in Javascript onSeptember 05, 2016

基础用法

可以用 v-model 指令在表单控件元素上创建双向数据绑定。根据控件类型它自动选取正确的方法更新元素。尽管有点神奇,v-model 不过是语法糖,在用户输入事件中更新数据,以及特别处理一些极端例子。

Text

<span>Message is: {{ message }}</span>
<br>
<input type="text" v-model="message" placeholder="edit me">

Checkbox

单个勾选框,逻辑值:

<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>

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

<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 | json }}</span>
new Vue({
 el: '...',
 data: {
 checkedNames: []
 }
})

Radio

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

Select

单选:

<select v-model="selected">
 <option selected>A</option>
 <option>B</option>
 <option>C</option>
</select>
<span>Selected: {{ selected }}</span>

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

<select v-model="selected" multiple>
 <option selected>A</option>
 <option>B</option>
 <option>C</option>
</select>
<br>
<span>Selected: {{ selected | json }}</span>

动态选项,用 v-for 渲染:

<select v-model="selected">
 <option v-for="option in options" v-bind:value="option.value">
 {{ option.text }}
 </option>
</select>
<span>Selected: {{ selected }}</span>
new Vue({
 el: '...',
 data: {
 selected: 'A',
 options: [
  { text: 'One', value: 'A' },
  { text: 'Two', value: 'B' },
  { text: 'Three', value: 'C' }
 ]
 }
})

绑定 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 实现,并且这个属性的值可以不是字符串。

Checkbox

<input
 type="checkbox"
 v-model="toggle"
 v-bind:true-value="a"
 v-bind:false-value="b">

// 当选中时
vm.toggle === vm.a
// 当没有选中时
vm.toggle === vm.b

Radio

<input type="radio" v-model="pick" v-bind:value="a">

// 当选中时
vm.pick === vm.a

Select Options

<select v-model="selected">
 <!-- 对象字面量 -->
 <option v-bind:value="{ number: 123 }">123</option>
</select>

// 当选中时
typeof vm.selected // -> 'object'
vm.selected.number // -> 123

参数特性

lazy

在默认情况下,v-model 在input 事件中同步输入框值与数据,可以添加一个特性 lazy,从而改到在 change 事件中同步:

<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model="msg" lazy>

number

如果想自动将用户的输入转为 Number 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个特性 number:

<input v-model="age" number>

debounce

debounce 设置一个最小的延时,在每次敲击之后延时同步输入框的值与数据。如果每次更新都要进行高耗操作(例如在输入提示中 Ajax 请求),它较为有用。

<input v-model="msg" debounce="500">

注意 debounce 参数不会延迟 input 事件:它延迟“写入”底层数据。因此在使用 debounce 时应当用 vm.$watch() 响应数据的变化。若想延迟DOM 事件,应当使用 debounce 过滤器。

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
入门基础学习 ExtJS笔记(一)
Nov 11 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
js中document.write的那点事
Dec 12 Javascript
js面向对象的写法
Feb 19 Javascript
微信小程序 引入es6 promise
Apr 12 Javascript
微信小程序 转发功能的实现
Aug 04 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
Nov 18 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
深入koa-bodyparser原理解析
Jan 16 Javascript
详解vue-property-decorator使用手册
Jul 29 Javascript
React 条件渲染最佳实践小结(7种)
Sep 27 Javascript
Ajax实现三级联动效果
Oct 05 Javascript
深入分析node.js的异步API和其局限性
Sep 05 #Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 #Javascript
JS锚点的设置与使用方法
Sep 05 #Javascript
jquery基本选择器匹配多个元素的实现方法
Sep 05 #Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
Sep 05 #Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
Sep 05 #Javascript
Vue.js每天必学之计算属性computed与$watch
Sep 05 #Javascript
You might like
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
javascript动态加载三
2012/08/22 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
Python脚本实现代码行数统计代码分享
2015/03/10 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
python实现随机漫步方法和原理
2019/06/10 Python
python3.6编写的单元测试示例
2019/08/17 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
Python内置异常类型全面汇总
2020/05/28 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
四年级数学教学反思
2014/02/02 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
名人演讲稿范文
2014/09/16 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
跳高加油稿
2015/07/21 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
尝试使用Python爬取城市租房信息
2022/04/12 Python