输入
之前学习所有指令都属于输出指令, 都是通过表达式(JS代码)来操作数据如何显示在视图中, 是单向数据绑定
输入指令把用户的输入(例如: 输入, 选择等)同步到视图上
而通过用户输入改变视图就是双向数据绑定
v-model
指令
在学习v-model指令之前, 需要先熟悉表单元素 .
语法
v-model='变量'
- 绑定表单:
v-model
必须绑定在表单元素上, 例如: input, textarea, select, checkbox, radio等
作用
- 绑定一个变量, 这个变量的值就是用户输入的value
v-model
实现了双向数据绑定
基本用法
绑定input, textarea标签
- type: text
v-model
绑定的是字符串
<div id="app">
<p>绑定input标签:</p>
<input type="text" v-model="message"> <!--绑定变量message-->
<p>消息是: {{ message }}</p> <!--显示变量message的值-->
<p>绑定textarea标签:</p>
<textarea v-model="message2"></textarea> <!--绑定变量message-->
<p>{{ message2 }}</p> <!--显示变量message的值-->
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'hello', // 设置变量的值
message2: '多行文本'
}
})
</script>
动态展示数据<pre>{{$data|json}}</pre>
H5表单元素类型为number, date, e-mail的input标签
注: 无验证类型的提示信息
- type: number
- value: 用户输入的类型必须是number类型
<div id='app'>
<from>
<input v-modle='phoneNumber' type='number'>
<p>{{phoneNumber}}</p>
</from>
</div>
<script>
var app = new Vue({
el: 'app',
data: {
phoneNumber: '18000001111'
}
});
</script>
绑定单选按钮
- type: redio
- value: string
v-model
与字符串绑定
<div id="app">
<input type="radio" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>Picked: {{ picked }}</span>
</div>
<script>
var app =new Vue({
el: '#app',
data: {
picked: 'One'
}
})
</script>
结果: v-model的值为'One'
绑定单选框
- type: checkbox
v-model
与布尔值绑定- true为选择, false为取消
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
// Vue实例里
data: {
checked: true
}
结果: v-model的值为true
绑定多选框
将多个选择框, 保存在数组里
- type: checkbox
v-model
与数组绑定
<input type="checkbox" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
// Vue实例里
data: {
checkedNames: []
}
绑定下拉菜单
v-model
绑定的是value属性, 不是用户看到的文本内容- 属性值为字符串
<div id="example-5" class="demo">
<select v-model="selected">
<option value='a'>A</option>
<option value='b'>B</option>
<option value='c'>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
// Vue实例里
data: {
selected: 'b' // 选择大写字母B
}
结果: v-model的值为'c'
获取多个输入数据
<div id="app">
<input type="text" v-model="inputTask.text"/>
<input type="number" v-model="inputTask.priority" />
</div>
<script>
var vm = new Vue({
el:"#app",
data:{
inputTask: {text: "新任务", priority:0}
},
methods:{
}
});
</script>
input有了v-model就不要再用vaule。
MVVM的概念
MVVM是MVC的演变, 与MVC的设计思想是一样的
MVC是单向数据绑定, 在Vue里就是通过JS代码(表达式)来更新数据到视图
用户的输入就是双向数据绑定, 而
v-model
实现了双向数据绑定Vue实例就是MVVM里的VM