VUE学习笔记:7.v-model指令讲解

1.v-model介绍

在这里插入图片描述

  • v-model主要用来操作input标签,实现标签与数据的双向绑定
  • 双向绑定:即改变vue中数据的值会导致input标签中的值改变,同理改变input标签中的值来也会导致vue中数据的值改变。
  • 能双向绑定的input标签包括:text格式,select格式和textarea格式,radio格式,checkbox格式等

2.v-model的基本使用

格式如下:

<input type="text" v-model="message"/>
# 将input标签与数据message双向绑定,改变数据message的值或者改变input标签的value值,另一方都会改变。
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<div id="app">
	<input type="text" v-model="message"/>
	<h3>{{message}}</h3>
</div>

<!--引入本地的vue.js文件-->
<script src="../vue.js"></script>

<script>
    // ES6中使用let定义变量,使用const定义常量
    let app = new Vue({
        el: '#app', // 讲这个vue实例与id为app的标签关联起来
        data: {
			message: "哈哈哈"
        },
        

    })
</script>
</body>
</html>

效果如下:
在这里插入图片描述
在这里插入图片描述

3.v-model的实现原理

在讲v-model指令的实现原理之前,我们需要了解input标签的特有的一个监听事件inputinput事件主要用来监听用户是否中输入框中输入内容。

v-model的实现原理:

  • 实现数据到input标签的绑定:v-model通过v-bind指令将数据绑定到input标签的value属性,实现数据到input标签的单向绑定
  • 实现input标签到数据的绑定:v-model通过v-on实现对input标签的input事件的监听。当input事件发生时则将input标签中的最新的value值赋值给数据
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<div id="app">
	<input type="text" v-bind:value="message" v-on:input="inputcalue($event)"/>
	<h3>{{message}}</h3>
</div>

<!--引入本地的vue.js文件-->
<script src="../vue.js"></script>

<script>
    // ES6中使用let定义变量,使用const定义常量
    let app = new Vue({
        el: '#app', // 讲这个vue实例与id为app的标签关联起来
        data: {
			message: "哈哈哈"
        },
		methods:{
			inputcalue: function(event){
				<!--将input标签的value值赋值给message-->
				this.message = event.target.value;
			}
		}
        

    })
</script>
</body>
</html>

效果与v-model一样。

4.v-model操作radio类型

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<div id="app">
	<label for="man">
		<input type="radio" id="man" value="" v-model="message"/></label>
	<label for="woman">
		<input type="radio" id="woman" value="" v-model="message"/></label>
	<h3>你选择的性别是:{{message}}</h3>
</div>

<!--引入本地的vue.js文件-->
<script src="../vue.js"></script>

<script>
    // ES6中使用let定义变量,使用const定义常量
    let app = new Vue({
        el: '#app', // 讲这个vue实例与id为app的标签关联起来
        data: {
			message: "男"
        }
		}
        

    })
</script>
</body>
</html>

效果如下:
在这里插入图片描述

5.v-model操作checkbox类型

(1)操作checkbox类型的单选框

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<div id="app">
	<label for="agree">
		<!--checkbox类型单选框,当选中时value为true,否则为false-->
		<input type="checkbox" id="agree" v-model="message"/>是否同意协议
	</label>
	<h3>是否同意协议:{{message}}</h3>
</div>

<!--引入本地的vue.js文件-->
<script src="../vue.js"></script>

<script>
    // ES6中使用let定义变量,使用const定义常量
    let app = new Vue({
        el: '#app', // 讲这个vue实例与id为app的标签关联起来
        data: {
			message: false
        }
        

    })
</script>
</body>
</html>

运行效果如下:
在这里插入图片描述

(2)操作checkbox类型的多选框

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<div id="app">
	<label for="lanqiu">
		<!--checkbox类型多选框,必须有value属性且赋值-->
		<input type="checkbox" id="lanqiu" value="篮球" v-model="message"/>篮球
	</label>
	<label for="zuqiu">
		<!--checkbox类型多选框,必须有value属性且赋值-->
		<input type="checkbox" id="zuqiu" value="足球" v-model="message"/>足球
	</label>
	<label for="yumaoqiu">
		<!--checkbox类型多选框,必须有value属性且赋值-->
		<input type="checkbox" id="yumaoqiu" value="羽毛球" v-model="message"/>羽毛球
	</label>
	<label for="pingpangqiu">
		<!--checkbox类型多选框,必须有value属性且赋值-->
		<input type="checkbox" id="pingpangqiu" value="乒乓球" v-model="message"/>乒乓球
	</label>
	<h3>你的爱好是:{{message}}</h3>
</div>

<!--引入本地的vue.js文件-->
<script src="../vue.js"></script>

<script>
    // ES6中使用let定义变量,使用const定义常量
    let app = new Vue({
        el: '#app', // 讲这个vue实例与id为app的标签关联起来
        data: {
			message: [] //因为data需要接受多选框的多个值,所以定义为数组
        }
        

    })
</script>
</body>
</html>

运行效果如下:
在这里插入图片描述

6.v-model操作select类型

(1)操作select类型的单选框

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<div id="app">
	<select name="aaa" v-model="message">
		<option value="苹果">苹果</option>
		<option value="香蕉">香蕉</option>
		<option value="桃子">桃子</option>
		<option value="葡萄">葡萄</option>
	</select>
	<h3>你喜欢的水果是:{{message}}</h3>
</div>

<!--引入本地的vue.js文件-->
<script src="../vue.js"></script>

<script>
    // ES6中使用let定义变量,使用const定义常量
    let app = new Vue({
        el: '#app', // 讲这个vue实例与id为app的标签关联起来
        data: {
			message: '香蕉'
        }
        

    })
</script>
</body>
</html>

运行效果如下:
在这里插入图片描述

(2)操作select类型的多选框

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<div id="app">
	<!--select类型中增加multiple属性,表示该select为多选框-->
	<select name="aaa" v-model="message" multiple>
		<option value="苹果">苹果</option>
		<option value="香蕉">香蕉</option>
		<option value="桃子">桃子</option>
		<option value="葡萄">葡萄</option>
	</select>
	<h3>你喜欢的水果是:{{message}}</h3>
</div>

<!--引入本地的vue.js文件-->
<script src="../vue.js"></script>

<script>
    // ES6中使用let定义变量,使用const定义常量
    let app = new Vue({
        el: '#app', // 讲这个vue实例与id为app的标签关联起来
        data: {
			message: []
        }
        

    })
</script>
</body>
</html>

运行效果如下:
在这里插入图片描述

7.值绑定操作

上面我们的例子中,选择框中的所有选项都是写死的。实际开发过程中,选择框中的选项值也应该是后台的数据动态绑定的。这就是值绑定。

以上面select单选框为例:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<div id="app">
	<!--select类型中增加multiple属性,表示该select为多选框-->
	<select name="aaa" v-model="message">
		<option v-for="item of allmessage" :value="item">{{item}}</option>
	</select>
	<h3>你喜欢的水果是:{{message}}</h3>
</div>

<!--引入本地的vue.js文件-->
<script src="../vue.js"></script>

<script>
    // ES6中使用let定义变量,使用const定义常量
    let app = new Vue({
        el: '#app', // 讲这个vue实例与id为app的标签关联起来
        data: {
			message: '香蕉' ,//该数据记录用户的选择
			allmessage: ['苹果','香蕉','桃子','葡萄','番茄']//该数据记录选择框中的所有选项值
        }     
    })
</script>
</body>
</html>

运行效果如下:
在这里插入图片描述

8.v-model的修饰符讲解

在这里插入图片描述

  • lazy修饰符格式:v-model.lazy="xxx"
  • number修饰符格式:v-model.number="xxx"
  • trim修饰符格式:v-model.trim="xxx"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值