话不多说,先上完整代码:

<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<script type="text/javascript" src="js/vue.js"></script>
<title></title>
</head> <body>
<h2>表单控件</h2>
<div id="dr01">
<div>
<h4>#Text</h4>
<span>Message is: {{ message }}</span>
<br>
<input type="text" v-model="message" placeholder="please input the message">
</div>
<div>
<h4>#CheckBox</h4>
<input id="checkbox" type="checkbox" v-model="checked" />
<label for="checkbox">the checkbox is checked: {{checked}}</label> <br /> <input type="checkbox" id="box01" value="box01" v-model="checkedNames" />
<label for="box01">box01</label>
<input type="checkbox" id="box02" value="box02" v-model="checkedNames" />
<label for="box02">box02</label>
<input type="checkbox" id="box03" value="box03" v-model="checkedNames" />
<label for="box03">box03</label>
<br />
<span>CheckedNames:{{checkedNames|json}}</span>
</div>
<div>
<h4>#Radio</h4>
<input type="radio" id="man" value="man" v-model="picked" />
<label for="man">man</label>
<br />
<input type="radio" id="female" value="female" v-model="picked" />
<label for="female">female</label>
<br />
<span>Picked: {{ picked }}</span>
</div>
<div>
<h4>#Selected</h4>
<p>单选</p>
<select v-model="drSelected">
<option selected="selected">A</option>
<option>B</option>
<option>C</option>
<option>D</option>
</select>
<span>the single selected is: {{drSelected}}</span> <p>多选</p>
<select v-model="drMutiSelected" multiple style="text-align: center; overflow: hidden; width: 50px;">
<option selected="selected">A</option>
<option>B</option>
<option>C</option>
<option>D</option>
</select>
<span>ctrl multiple selected:{{drMutiSelected}}</span>
<p>动态选项,用v-for渲染:</p>
<select v-model="dr02Selected">
<option v-for="option in options" v-bind:value="option.value">
{{option.text}}
</option>
</select>
<span>Selected: {{ dr02Selected }}</span>
</div>
</div>
<h2>绑定Value</h2>
<div id="dr02">
<input id="02picked" type="radio" v-model="picked" v-bind:value="radio_picked">
<label for="02picked">the radio value:{{picked}}</label> <br /> <input id="02checkbox" type="checkbox" v-model="toggle" v-bind:true-value="check_true" v-bind:false-value="check_false" />
<label for="02checkbox">the checkbox value:{{toggle}}</label> <br /> <select v-model="selected">
<!-- 对象字面量 -->
<option v-bind:value="{number:123}">123</option>
</select> </div>
<h2>参数特性</h2>
<div id="dr03">
<h4>#lazy</h4>
<!-- 在input元素中添加lazy属性将会当input出发change时候触发数据更新 -->
<input id="msg03" v-model="msg03" lazy/>
<label for="msg03">the input value is {{msg03}}</label> <h4>#number</h4>
<input id="age" v-model="age" type="tel" number/>
<label for="age">the age is {{age}}</label> <h4>#debounce</h4>
<input id="debounce" v-model="username" debounce="500" />
<label for="debounce">username is {{username}}</label>
</div>
<script>
var dr01 = new Vue({
el: '#dr01',
data: {
message: "msg",
checked: false,
drSelected: "",
drMutiSelected: "",
checkedNames: [],
dr02Selected: "",
options: [{
text: "one",
value: "A"
}, {
text: "two",
value: "B"
}, {
text: "three",
value: "C"
}, {
text: "four",
value: "D"
}]
}
});
var dr02 = new Vue({
el: "#dr02",
data: {
picked: "unpicked",
radio_picked: "picked",
toggle: "un_checked",
check_true: "checked",
check_false: "un_checked",
}
});
var dr03 = new Vue({
el: "#dr03",
data: {
msg03: "msg03",
age: 12,
username: "wangzf",
}
});
</script>
</body> </html>

#1、Text

最常见的input示例:

html

<h4>#Text</h4>
<span>Message is: {{ message }}</span>
<br>
<input type="text" v-model="message" placeholder="please input the message">

然后在js中定义data的message:"msg"

结果展示:

  

#2、CheckBox

html

第一个复选框没有value属性,绑定了model为"checked",默认值是布尔类型,选中为true,未选中为false。

第二个复选框选项绑定的model是checkedNames,在多个选项中进行多选操作,最终的结果会将checkedNames转化为json数组。

<h4>#CheckBox</h4>
<input id="checkbox" type="checkbox" v-model="checked" />
<label for="checkbox">the checkbox is checked: {{checked}}</label> <br /> <input type="checkbox" id="box01" value="box01" v-model="checkedNames" />
<label for="box01">box01</label>
<input type="checkbox" id="box02" value="box02" v-model="checkedNames" />
<label for="box02">box02</label>
<input type="checkbox" id="box03" value="box03" v-model="checkedNames" />
<label for="box03">box03</label>
<br />
<span>CheckedNames:{{checkdNames|json}}</span>

在js中定义初始值checked:false,checkedNames:[](在这里复选框要转化为json格式的数组,所以一定要定义为空的数组,勾选某个选项后,自动更新为新的json数组)

checked: false,
checkedNames: [],

结果展示

当选中第一个复选框,第二个复选框按照231的顺序勾选的结果(与数组操作类似,入栈出栈的顺序):

  

#3、Radio

html

<h4>#Radio</h4>
<input type="radio" id="man" value="man" v-model="picked" />
<label for="man">man</label>
<br />
<input type="radio" id="female" value="female" v-model="picked" />
<label for="female">female</label>
<br />
<span>Picked: {{ picked }}</span>

因为在页面中定义了v-model="picked",所以我们需要在js中的vue组件中定义data的picked属性,如果默认都不选择,则定义picked:"",如果默认选择man,则定义picked:"man",如果默认选择female,则定义picked:"female"。

这里定义的是默认man。

  

  

#4、Select

html

<h4>#Selected</h4>
<p>单选</p>
<select v-model="drSelected">
<option selected="selected">A</option>
<option>B</option>
<option>C</option>
<option>D</option>
</select>
<span>the single selected is: {{drSelected}}</span>

在js中的vue组件中定义data属性 drSelected: "",

因为在页面中我们默认选中A,所以即使初始化的时候drSelected是空字符串,页面加载完毕后也会赋值给selected "A"

初始化页面展示:

  

#5、Select

5.1 多选

html:

<p>多选(按ctrl多选)</p>
<select v-model="drMutiSelected" multiple style="text-align: center; overflow: hidden; width: 50px;">
<option selected="selected">A</option>
<option>B</option>
<option>C</option>
<option>D</option>
</select>
<span>ctrl multiple selected:{{drMutiSelected}}</span>

在js中定义vue组件的data属性 drMutiSelected: "", 这里和checkbox不同,多选的结果顺序按照从上到下,简单的说就是每个选项都是有序号的,按照序号排列

结果展示:

  

5.2 select动态渲染

html

<p>动态选项,用v-for渲染:</p>
<select v-model="dr02Selected">
<option v-for="option in options" v-bind:value="option.value">
{{option.text}}
</option>
</select>
<span>Selected: {{ dr02Selected }}</span>

js中的data属性添加option数组

options: [{
text: "one",
value: "A"
}, {
text: "two",
value: "B"
}, {
text: "three",
value: "C"
}, {
text: "four",
value: "D"
}]

解释:

在下拉菜单中定义选项为遍历options数组的结果,option显示的是option.text属性,并把对应的值option.value绑定给当前选项

页面初始化:

  

#绑定Value

<h2>绑定Value</h2>
<div id="dr02">
<input id="man02" type="radio" v-model="gender" v-bind:value="man02">
<label for="man02">{{man02}}</label>
<input id="female02" type="radio" v-model="gender" v-bind:value="female02">
<label for="female02">{{female02}}</label> <div>your gender is {{gender}}</div> <br /> <input id="02checkbox" type="checkbox" v-model="toggle" v-bind:true-value="check_true" v-bind:false-value="check_false" />
<label for="02checkbox">the checkbox value:{{toggle}}</label>
</div>

js中定义的vue组件:

var dr02 = new Vue({
el: "#dr02",
data: {
gender: "",
man02: "man",
female02: "female",
toggle: "un_checked",
check_true: "checked",
check_false: "un_checked",
selected02: ""
}
});

解释:

1、radio。

与上面radio不同的是,input中的value值替换成了我们自己定义的数据,将man02和female02的值绑定到了input中,默认不选中某一个,当选中man时,value的值就是data中的man02的值,当选中female时,value的值就是data中的female02的值

2、checkbox。

与上面的checkbox不同,这里的checkbox绑定了选中和未选中的两种状态的值,选中时value为data中的check_true的值,为选中时value为data中的check_false的值。

页面初始化:

  

  

#参数特性

<h2>参数特性</h2>
<div id="dr03">
<h4>#lazy</h4>
<!-- 在input元素中添加lazy属性将会当input出发change时候触发数据更新 -->
<input id="msg03" v-model="msg03" lazy/>
<label for="msg03">the input value is {{msg03}}</label> <h4>#number</h4>
<input v-model="age" number>
<label for="age">the age is {{age}}</label> <h4>#debounce</h4>
<input id="debounce" v-model="username" debounce="500" />
<label for="debounce">username is {{username}}</label>
</div>

在js中添加vue组件

var dr03 = new Vue({
el: "#dr03",
data: {
msg03: "msg03",
age: 12,
username: "pxy",
}
});

理解:

1、lazy,延迟数据更新,这里并不是说取数据的时候才要更新数据,而是说在绑定的值确定发生变化的时候才要更新数据,示例中是id为"msg03"触发onchange的时候更新数据,简单的说就是当input失去焦点的时候触发数据更新。

2、number,在绑定的元素上添加number属性,如果当前的数值可以转化为number,则更新后的数据为number类型,如果当前的数值不能转化为number类型,则更新后的数据一般转化为string类型。

3、debounce,英文的意思是去除抖动。这里设置debounce="500",如果输入过程中两次输入的值的间隔时间不超过500ms,则不触发数据更新,不输入超过500ms则触发数据更新。

结果测试:

  

Vue.js-----轻量高效的MVVM框架(七、表单控件绑定)的更多相关文章

  1. vue.js基础知识篇(3):计算属性、表单控件绑定

    第四章:计算属性 为了避免过多的逻辑造成模板的臃肿不堪,可使用计算属性来简化逻辑. 1.什么是计算属性 <!DOCTYPE html><html lang="en" ...

  2. Vue表单控件绑定

    前面的话 本文将详细介绍Vue表单控件绑定 基础用法 可以用 v-model 指令在表单控件元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素.v-model本质上不过是语法糖,它负 ...

  3. Vue.js学习 Item9 – 表单控件绑定

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

  4. Vue.js学习笔记 第七篇 表单控件绑定

    本篇主要说明表单控件的数据绑定,这次没有新的知识点 文本框 1.普通文本框 <div id="app-1"> <p><input v-model=&q ...

  5. vue表单控件绑定(表单数据的自动收集)

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

  6. vue v-model 表单控件绑定

    v-model 指令在表单控件元素上创建双向数据绑定,下面一一进行示例解释. 1.v-model 双向绑定文本 <!DOCTYPE html> <html> <head ...

  7. Vue#表单控件绑定

    使用v-model 在表单控件上实现数据双向绑定. 单选:https://jsfiddle.net/miloer/bs49p0fx/ <input type="checkbox&quo ...

  8. Vue进阶之表单控件绑定

    1.单行input <html> <head> <meta charset="UTF-8"> <meta name="viewp ...

  9. 02 . Vue入门基础之条件渲染,列表渲染,事件处理器,表单控件绑定

    vue基础 声明式渲染 Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统 Example1 <!DOCTYPE html> <html> ...

随机推荐

  1. STM32 C++编程 005 I2c(Soft)类

    使用 C++ 语言给 STM32 编写一个 I2c(Soft)类 我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0 注意: 想学习本套 STM32 C++编 ...

  2. cmake利用toolchain.cmake生成makefile之后,make生成静态库失败问题

    问题描述 利用toolchian.cmake设置好编译器后,利用make指令生成静态库,出现以下问题 Error running link command: No such file or direc ...

  3. 单引号和0的ASCII码

    单引号的ASCII码为0xfe. 那么0xfefe,就表示''. 0的ACSII码为0x30.

  4. 安装Fastqc软件遇到的坑

    由于之前的HPC太难用了,所以决定搬家到十楼的工作站,于是就免不了配置必要的工作环境,其中一个少不了要安装的软件是就是fastqc,因为它太常用了. 我先是用conda安装,因为conda实在是太方便 ...

  5. hdu4283 You Are the One

    传送门 题目 The TV shows such as You Are the One has been very popular. In order to meet the need of boys ...

  6. Python程序设计8——网络编程

    Python是一个很强大的网络编程工具,python内有很多针对场景网络协议的库,在库顶部可以获得抽象层,这样就可以集中精力在程序的逻辑处理上,而不是停留在网络实现的细节中. 1 少数几个网络设计模块 ...

  7. SDUT 2107 图的深度遍历

    图的深度遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 请定一个无向图,顶点编号从0到 ...

  8. 福大软工1816 · 第五次作业 - 结对作业2_EXE图片_备用

    1_每日推荐界面.png 2_论文搜索界面.png 2_论文搜索界面_搜索功能.png 3_流行趋势_十大热词排名统计图.png 4_人物界面.png 5_我的收藏界面.png 6_设置界面.png ...

  9. 启动应用程序的Activty多种方式

    启动应用程序的Activity总共有三种方式,如下: 1>通过包名得到将启动应用的入口Activity,然后给intent附上相应的属性即可. 示例代码 public static void s ...

  10. 《Head First Servlets & JSP》-10-定制标记开发

    标记文件:很想include,但是比include更好 建立和使用标记文件的最简方法 取一个被包含文件(如Header.jsp),把它重命名为带有一个.tag扩展名(Header.tag): 把标记文 ...