表单输入绑定
不用v-model的情况下实现双向绑定(v-on、v-bind)
v-bind 将数据绑定到DOM节点上
v-on 数据改变,触发事件,将DOM节点上的数据绑定到js数据上
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-on:input="input" v-bind:value="value"/>
<input type="text" v-on:input="input2" value="初始值"/>
</div>
<script>
const app = new Vue({
el: "#app",
data: {
value: 'chen',
},
methods: {
input : function(event){
//IE 没有target只有srcElement Firefox正好相反
let target = event.target || event.srcElement;
this.value = target.value;
//value的值变化时会重新刷新视图 因此实现了双向绑定
},
input2 : function(event){
let target = event.target || event.srcElement;
console.log(target.value);
/*
* value 属性为 input 元素设定值。
* type="text", "password", "hidden" - 定义输入字段的初始值
*
* 当input框中的内容有变化时target.value的值会变,但是检查元素时value的值还是初始值
*/
}
}
});
</script>
</body>
</html>
双向绑定 :v-model
<input v-model="searchText" />
<!-- 相当于 -->
<input v-bind:value="searchText"
v-on:input="searchText = $event.target.value" />
<div id="app">
{{ value }} typeof {{ typeof value}}
<input type="text" v-model="input" value="value"/>
注意: v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值
而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。
</div>
<script>
const app = new Vue(
el: "#app",
data: {
value: 'chen',
},
});
</script>
注意:对于需要使用输入法 (如中文、日文、韩文等) 的语言,你会发现
v-model
不会在输入法组合文字过程中得到更新。如果你也想处理这个过程,请使用 input
事件。如图:
修饰符
- 1、.lazy
在默认情况下,v-model
在每次input
事件触发后将输入框的值与数据进行同步 (除了输入法组合文字时)。你可以添加lazy
修饰符,从而转变为使用change
事件进行同步(input框的change事件是input 框内容变化 ,失去焦点的时候才会触发;):
<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >
- 2、.number
如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:
<input v-model.number="age" type="number">
这通常很有用,因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回 原始 的值。
- 2、.trim
如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:
<input v-model.trim="msg">