v-model其实是一个语法糖,它的背后本质上是包含两个操作:

1.v-bind绑定一个value属性

2.v-on指令给当前元素绑定input事件

<input type="text" v-model="message">

等同于

<input type="text" v-bind:value="message" v-on:input="message = $event.target.value">
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  <!--<input type="text" v-model="message">-->

<!–<input type=”text” :value=”message” @input=”valueChange”>–>
<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: ‘你好啊’
},
methods: {
valueChange(event) {
this.message = event.target.value;
}
}
})
</script>

</body>
</html>

:hexoPostRenderEscape–>

修饰符

lazy修饰符:

​ 默认情况下,v-model默认是在input事件中同步输入框的数据的。

​ 也就是说,一旦有数据发生改变对应的data中的数据就会自动发生改变。

​ lazy修饰符可以让数据在失去焦点(blur)或者回车时才会更新:

number修饰符:

默认情况下,在输入框中无论我们输入的是字母还是数字,都会被当做字符串类型进行处理。

​ 但是如果我们希望处理的是数字类型,那么最好直接将内容当做数字处理。

​ number修饰符可以让在输入框中输入的内容自动转成数字类型

trim修饰符:

​ 如果输入的内容首尾有很多空格,通常我们希望将其去除

​ trim修饰符可以过滤内容左右两边的空格

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</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: ‘你好啊’,
age: 0,
name: ‘’
}
})

var age = 0
age = ‘1111’
age = ‘222’
</script>

</body>
</html>

:hexoPostRenderEscape–>