v-model的input事件和自定义input事件的执行顺序,探究v-model核心原理

    v-model便捷高效的特性深得开发者喜爱,其背后的运作机制以及其原生的input事件的交互逻辑和执行顺序,虽然可以通过直接测试的方式浅层获知,但往往需要深入探究才能真正知晓

探究的两种方式

1. 代码直接测试

<input v-model="txt" @input="(e) => console.log(e.target.value, this.txt)"/>

我们发现输出的是都是输入后最新的值,因此是v-model中的input事件优先执行将value更新了

2. vue.js源码中探究

v-model的核心原理如下

<input v-model="txt" />
<!-- 会被v-model处理为 -->
<input :value="txt" @input="if($event.target.composing)return;message = $event.target.value" />

即在model指令处理中,给input元素v-bind:value = "txt" , 并且增加了@input事件输入时将e.target.value实时更新txt,至于input事件中的if判断是啥,下文知晓

了解了原理,看vue.js源码中的v-model实现会简单一些,model指令定义如下

默认v-model处理

如下输入文字时,处于未确认状态的文字,属于IME构成。在上面的①处会判断,如果是IME触发的,不会更新value,但是会触发input事件

330a98a9d2214b968e68264b62c9ab2a.png

增加事件处理方法

 结论同上测试结果,v-model生成的input事件优先级处于队首优先执行

扩展阅读

同一个DOM元素,多次绑定事件的效果是怎样的

  • 绑定多个onclick事件,后边的绑定事件覆盖前边的。
  • 绑定多个addEventListener事件,是不会互相覆盖的,彼此顺序执行。
  • 即使用onclick绑定事件,又使用addEventListener绑定事件(默认冒泡,三参false),他们之间是不会覆盖的。如果onclick事件是直接绑定行内绑定在DOM标签上的,会优先执行onclick绑定事件,接下来执行addEventListener事件;如果onclick事件是在js代码中注册的,则绑定事件顺序执行。
  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝追雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值