Vue.js-v-model
1.1 v-model基本使用
Vue中使用v-model指令来实现表单元素和数据的双向绑定。
案例的解析
- 当输入框输入内容时,因为input中的v-model绑定了message。所以会实时将输入的内容传递给message,message发生改变。
- 当message发生改变时,因为上面我们使用Mustache语法,将message的值插入到DOM中,所以DOM会发生响应的改变。
- 所以,通过v-model实现了双向的绑定。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-model的基本使用</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<input type="text" v-model="message">
<h2>{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
message: 'hello Vue.js!!!'
}
})
</script>
</body>
</html>
执行结果

1.2 v-mode的原理

v-model其实是一个语法糖,它的背后本质上是包含两个操作
- v-bind绑定一个value属性。
- v-on指令给当前元素绑定input事件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-model使用原理</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<!--输入和监听-->
<input type="text" :value="message" @input="message = $event.target.value">
<h2>{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
message: 'hello world!'
},
// 方法
methods: {
valueChange(event){
this.message = event.target.value;
}
}
})
</script>
</body>
</html>
执行结果

1.3 v-model结合radio类型
当存在多个单选框时。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-model结合radio</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<label for="male">
<input type="radio" id="male" value="男" v-model="sex">男
</label>
<label for="female">
<input type="radio" id="female" value="女" v-model="sex">女
</label>
<h3>您选择的性别是:{{sex}}</h3>
</div>
<script src="../js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
sex: '男'
}
})
</script>
</body>
</html>
执行结果

1.4 v-mode结合单选框
单个勾选框
v-model即为布尔值,此时input的value并不影响v-model的值。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-mode结合单选框</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<label for="agree">
<input type="checkbox" id="agree" v-model="isAgree">同意协议
</label>
<h2>你的选择是:{{isAgree}}</h2>
<!--取反操作-->
<button :disabled="!isAgree">下一页</button>
</div>
<script src="../js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
message: 'hello world!',
isAgree: false
}
})
</script>
</body>
</html>
执行结果

1.5 v-mode结合复选框
多个复选框
当是多个复选框时,因为可以选中多个,所以对应的data中属性是一个数组。
当选中某一个时,就会将input的value添加到数组中。
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-mode结合复选框</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<input type="checkbox" value="篮球" v-model="hobbies">篮球
<input type="checkbox" value="足球" v-model="hobbies">足球
<input type="checkbox" value="乒乓球" v-model="hobbies">乒乓球
<input type="checkbox" value="羽毛球" v-model="hobbies">羽毛球
<h2>您的爱好是: {{hobbies}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
message: 'hello world!',
isAgree: false,
hobbies:[]
}
})
</script>
</body>
</html>
执行结果

1.6 v-model结合select类型
基本特点
单选:只能选中一个值。
- v-model绑定的是一个值。
- 当我们选中option中的一个时,会将它对应的value赋值到mySelect中
多选:可以选中多个值。
- v-model绑定的是一个数组。
- 当选中多个值时,就会将选中的option对应的value添加到数组mySelects中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-model结合select类型</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<!--选择一个-->
<select name="abc" v-model="fruit">
<option value="苹果">苹果</option>
<option value="香蕉">香蕉</option>
<option value="榴莲">榴莲</option>
<option value="葡萄">葡萄</option>
</select>
<h3>您选择的水果是:{{fruit}}</h3>
<!--多选择-->
<select name="abc" v-model="fruits" multiple>
<option value="苹果">苹果</option>
<option value="香蕉">香蕉</option>
<option value="榴莲">榴莲</option>
<option value="葡萄">葡萄</option>
</select>
<h3>你选择的水果是:{{fruits}}</h3>
</div>
<script src="../js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
fruit: '香蕉',
fruits: []
}
})
</script>
</body>
</html>
执行结果

1.7 值绑定
值绑定就是动态的给value赋值而已。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>值绑定</title>
</head>
<body>
<div id="app">
<label v-for="item in originHobbies" :for="item">
<input type="checkbox" :value="item" v-model="hobbies">{{item}}
</label>
<h3>您的爱好是: {{hobbies}}</h3>
</div>
<script src="../js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
hobbies: [],
originHobbies: ['篮球', '足球', '乒乓球', '羽毛球', '台球', '高尔夫球']
}
})
</script>
</body>
</html>
执行结果

1.8 v-model修饰符
lazy修饰符
- 默认情况下,v-model默认是在input事件中同步输入框的数据的。
- 也就是说,一旦有数据发生改变对应的data中的数据就会自动发生改变。
- lazy修饰符可以让数据在失去焦点或者回车时才会更新。
number修饰符
- 默认情况下,在输入框中无论我们输入的是字母还是数字,都会被当做字符串类型进行处理。
- 但是如果我们希望处理的是数字类型,那么最好直接将内容当做数字处理。
- number修饰符可以让在输入框中输入的内容自动转成数字类型。
trim修饰符
如果输入的内容首尾有很多空格,通常我们希望将其去除,trim修饰符可以过滤内容左右两边的空格。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-model修饰符作用</title>
</head>
<body>
<div id="app">
<!--1.修饰符:lazy可以让数据在失去焦点或者回车时才会更新-->
<input type="text" v-model.lazy="message">
<h2>{{message}}</h2>
<!--2.修饰符:number可以让在输入框中输入的内容自动转成数字类型-->
<input type="number" v-model.number="age">
<h2>{{age}}-{{typeof age}}</h2>
<!--3.trim修饰符可以过滤内容左右两边的空格-->
<input type="text" v-model.trim="name">
<h2>你输入的名字:{{name}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
message: 'hello Vue.js!!!',
age: 0,
name: ''
}
})
</script>
</body>
</html>
执行结果


浙公网安备 33010602011771号