文章目录
表单
针对一般元素,比如div,span 、p、 img等,采用的是单向绑定:
v-bind
只要把数据绑定到视图中就可以,但是对于表单这种交互比较强的元素或组件,我们一般可能需求双向绑定,即:用户对视图元素的操作同时更新数据。
v-model
在内部为不同的输入元素使用不同的属性和事件来处理数据
- text & textarea
- checkbox & radio
- select
text 和 textrea
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
</style>
<!-- 通过script的方式引入vue -->
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="v1">
<textarea name="" id="" v-model="v2" cols="30" rows="10"></textarea>
</div>
<script>
let app = new Vue({
//el指定id为app的元素
el: "#app",
//template替换的是id为app的元素的所有内容
data: {
v1:'aaa',
v2:'bbbb'
},
})
</script>
</body>
</html>
效果图如下
checkbox 和radio
checkbox 和 radio 使用checked属性和change事件
- 单选框绑定一个值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
</style>
<!-- 通过script的方式引入vue -->
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="radio" name="" id="" v-model="v3"value="男">男
<input type="radio" name="" id="" v-model="v3" value="女">女
<button @click="getData">按钮</button>
</div>
<script>
let app = new Vue({
//el指定id为app的元素
el: "#app",
//template替换的是id为app的元素的所有内容
data: {
v1:'aaa',
v2:'bbbb',
v3:'男'
},
methods:{
getData(){
console.log(this.v3);
}
}
})
</script>
</body>
</html>
效果如下
- 多选框绑定到一个布尔值或者数组
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
</style>
<!-- 通过script的方式引入vue -->
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="radio" name="" id="" v-model="v3"value="男">男
<input type="radio" name="" id="" v-model="v3" value="女">女
<button @click="getData">按钮</button>
<!-- -->
<hr>
<!-- 单选 -->
<input type="checkbox" v-model="v4">同意
<hr>
<!-- 多选 -->
<input type="checkbox" name="" id="" v-model="v5" value="足球">足球
<input type="checkbox" name="" id="" v-model="v5" value="篮球">篮球
</div>
<script>
let app = new Vue({
//el指定id为app的元素
el: "#app",
//template替换的是id为app的元素的所有内容
data: {
v1:'aaa',
v2:'bbbb',
v3:'男',
v4:true,
v5:['足球','音乐']
},
methods:{
getData(){
console.log(this.v3);
}
}
})
</script>
</body>
</html>
效果如下
select
select字段将value 作为prop并将change作为事件
- 单选绑定到值,多选绑定到数组
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
</style>
<!-- 通过script的方式引入vue -->
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<!-- 单选 -->
<select name="" id="" v-model="v3">
<option value="男">男</option>
<option value="女">女</option>
</select>
<!-- 多选 -->
<select name="" id="" v-model="v5" multiple>
<option value="足球">足球</option>
<option value="音乐">音乐</option>
</select>
<button @click="getData">按钮</button>
</div>
<script>
let app = new Vue({
//el指定id为app的元素
el: "#app",
//template替换的是id为app的元素的所有内容
data: {
v1:'aaa',
v2:'bbbb',
v3:'女',
v4:true,
v5:['足球','音乐']
},
methods:{
getData(){
console.log(this.v3,this.v5);
}
}
})
</script>
</body>
</html>
效果如下
computed与watch
computed
在实际的应用中,我们会有一些原始数据,同时在应用中又会有一些数据是根据某些原始数据派生出来的一种情况,vue定义一个专门用来处理这种派生的数据的选项, computed
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport