-
Notifications
You must be signed in to change notification settings - Fork 895
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Day101:Vue v-model 是如何实现的,语法糖实际是什么 #914
Comments
一、语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。糖在不改变其所在位置的语法结构的前提下,实现了运行时的等价。可以简单理解为,加糖后的代码编译后跟加糖前一样,代码更简洁流畅,代码更语义自然. 二、实现原理1.作用在普通表单元素上动态绑定了 <input v-model="sth" />
// 等同于
<input
v-bind:value="message"
v-on:input="message=$event.target.value"
>
//$event 指代当前触发的事件对象;
//$event.target 指代当前触发的事件对象的dom;
//$event.target.value 就是当前dom的value值;
//在@input方法中,value => sth;
//在:value中,sth => value; 2.作用在组件上在自定义组件中,v-model 默认会利用名为 value 的 prop 和名为 input 的事件 本质是一个父子组件通信的语法糖,通过prop和$.emit实现 因此父组件 在组件的实现中,我们是可以通过 v-model属性 来配置子组件接收的prop名称,以及派发的事件名称。 例子 // 父组件
<aa-input v-model="aa"></aa-input>
// 等价于
<aa-input v-bind:value="aa" v-on:input="aa=$event.target.value"></aa-input>
// 子组件:
<input v-bind:value="aa" v-on:input="onmessage"></aa-input>
props:{value:aa,}
methods:{
onmessage(e){
$emit('input',e.target.value)
}
} 默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event 但是一些输入类型比如单选框和复选框按钮可能想使用 value prop 来达到不同的目的。使用 model 选项可以回避这些情况产生的冲突。 js 监听input 输入框输入数据改变,用oninput ,数据改变以后就会立刻出发这个事件。 通过input事件把数据$emit 出去,在父组件接受。 父组件设置v-model的值为input$emit过来的值。 |
v-model指令在表单input,textarea,select等元素上创建双向数据绑定,本质上是语法糖
|
扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。
The text was updated successfully, but these errors were encountered: