vue之v-model小知识分享

284 阅读1分钟

当我们组件化开发,v-model想必大家都用的到,有input, select的组件,或者自己写的组件,把v-model拆解,

image.png

相当于绑定的value和input事件来实现双向绑定,当父组件绑定v-model属性,子组件必然会向上抛出input事件,和接收prop为value的值,对于value的变化通常会watch value的方式,

image.png

image.png

image.png

但在很多场景,父组件绑定了v-model属性,我们需要区别当前的value到底从父组件通过value的变动导致的,还是子组件input抛出的事件改变的,如果不去区分,导致同时触发监听value的watch事件,在watch事件里如果处理较为复杂的数据结构并不是能够很好去控制,这是时候我们需要去定义一种状态我就叫它behaviorStatus,

image.png

当我们向上抛出input,change等事件之前赋值为true,当抛出父组件,由于父组件绑定v-model的原因,执行上下文会走到监听value的watch事件,这时候我们需要在监听事件中给予behaviorStatus状态的判断,在事件中return出去,这样子组件触发的input就不会继续向下执行,当抛出事件的执行上下文结束之后,value值变化触发了监听的回调,执行延时回调把状态赋值为初始状态false即可。

image.png