基础用法
-
v-model本质上不过是语法糖,可以用 v-model 指令在表单<input>、<textarea>及<select>元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。v-model会忽略所有表单元素的value、checked、selected特性的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的data选项中声明初始值。 -
v-model在内部为不同的输入元素使用不同的属性并抛出不同的事件:- text 和 textarea 元素使用
value属性和input事件; - checkbox 和 radio 使用
checked属性和change事件; - select 字段将
value作为 prop 并将change作为事件。
- text 和 textarea 元素使用
实现原理
-
v-model只不过是一个语法糖而已,真正的实现靠的还是
-
v-bind:绑定响应式数据
-
触发oninput 事件并传递数据
-
-
举例如下:
<input v-model="sth" /> // 等同于 <input :value="sth" @input="sth = $event.target.value" /> //自html5开始,input每次输入都会触发oninput事件,所以输入时input的内容会绑定到sth中,于是sth的值就被改变; //$event 指代当前触发的事件对象; //$event.target 指代当前触发的事件对象的dom; //$event.target.value 就是当前dom的value值; //在@input方法中,value => sth; //在:value中,sth => value;
- v-model是双向绑定,即表单可以拿到vue中的数据,表单中的数据也可以传到vue中
而v-bind:value 只能是表单拿到vue的数据,vue无法拿到表单的数据
个人理解,有瑕疵以后补充 -
v-bind
- 缩写:
: - 预期:
any (with argument) | Object (without argument) - 参数:
attrOrProp (optional) - 修饰符:
.prop- 被用于绑定 DOM 属性。.camel- (2.1.0+) 将 kebab-case 特性名转换为 camelCase..sync(2.3.0+) 语法糖,会扩展成一个更新父组件绑定值的 v-on 侦听器。
- 用法:
动态地绑定一个或多个特性,或一个组件 prop 到表达式。
在绑定class或style特性时,支持其它类型的值,如数组或对象。可以通过下面的教程链接查看详情。
在绑定 prop 时,prop 必须在子组件中声明。可以用修饰符指定不同的绑定类型。
没有参数时,可以绑定到一个包含键值对的对象。注意此时class和style绑定不支持数组和对象。
v-on
- 缩写:
@ - 预期:
Function | Inline Statement | Object - 参数:
event - 修饰符:
.stop- 调用 event.stopPropagation()。.prevent- 调用 event.preventDefault()。.capture- 添加事件侦听器时使用 capture 模式。.self- 只当事件是从侦听器绑定的元素本身触发时才触发回调。.{keyCode | keyAlias}- 只当事件是从特定键触发时才触发回调。.native- 监听组件根元素的原生事件。.once- 只触发一次回调。.left- (2.2.0) 只当点击鼠标左键时触发。.right- (2.2.0) 只当点击鼠标右键时触发。.middle- (2.2.0) 只当点击鼠标中键时触发。.passive- (2.3.0) 以 { passive: true } 模式添加侦听器
- 用法:
绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。
从2.4.0开始,v-on同样支持不带参数绑定一个事件/监听器键值对的对象。注意当使用对象语法时,是不支持任何修饰器的。
用在普通元素上时,只能监听 原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件。
在监听原生 DOM 事件时,方法以事件为唯一的参数。如果使用内联语句,语句可以访问一个$event属性:v-on:click="handle('ok', $event)"。
- 缩写:
-
Vue.js为两个最为常用的指令提供了特别的缩写:
v-bind缩写
<!--完整语法--> <a v-bind:href="url">测试</a> <!--缩写--> <a :href="url">测试</a>
v-on缩写
<!--完整语法--> <a v-on:click="doSomething">修改</a> <!--缩写--> <a @click="doSomething">修改</a>
技术交流qq群:143280841
浙公网安备 33010602011771号