当前位置: 首页 > Web前端 > vue.js

v-model中组合事件的使用

时间:2023-03-31 20:06:28 vue.js

前言:我们都知道vue中的v-model指令可以实现双向数据绑定,但它本质上是一个语法糖。例如,组件上的v-model将默认使用该名称。价值的支柱和名为输入的事件。在自定义实现过程中,发现在使用输入法时,输入拼音选择候选词也会触发原生input标签的input事件,从而更新value。但是element-ui的输入组件就不是这样了,它其实是用到了组合事件。compositionend事件compositionend事件在一段文本的合成完成或取消时触发(触发需要一系列键和其他输入的特殊字符,例如语音识别或移动中的单词建议)。compositionstart事件在输入一段文字之前触发(类似于keydown事件,但是这个事件只是在几个可见字符输入之前,而这些可见字符的输入可能需要一系列的键盘操作,语音识别或点击输入法的备选词)。compositionupdate事件在一段文本中输入字符时触发(这些可见字符的输入可能需要一系列的键盘操作、语音识别或点击输入法的备选词)(内容来自MDN)//方法handleCompositionStart(){this.isComposing=true;},handleCompositionUpdate(event){const文本=事件。目标价值;常量lastCharacter=text[text.length-1]||'';//这里用一个正则来判断最后一个字符是不是韩文。懂韩文的请指教~this.isComposing=!isKorean(lastCharacter);},handleCompositionEnd(event){if(this.isComposing){this.isComposing=false;这个.handleInput(事件);}},handleInput(event){//在组合过程中不应发出输入if(this.isComposing)return;//hackforhttps://github.com/ElemeFE/element/issues/8548//当我们不支持IE时应该删除以下行if(event.target.value===this.nativeInputValue)return;this.$emit('输入',event.target.value);//确保本机输入值受到控制//请参阅:https://github.com/ElemeFE/element/issues/12850this.$nextTick(this.setNativeInputValue);},handleChange(event){this.$emit('change',event.target.value);},可以看到nativeinput绑定了很多事件,其中在input事件中,先判断isComposing的bo??olean值,看compositionevents的一系列方法是否是触发,然后决定是否执行下一段代码this。$emit('input',event.target.value)@compositionstart="handleCompositionStart"@compositionupdate="handleCompositionUpdate"@compositionend="handleCompositionEnd"@input="handleInput"`总结:这个事件本身比较简单,有只有三个部分一个状态事件,但是在双向数据绑定的实现中,避免在输入法中选择单词时连续触发是很重要的一环。看一会源码很爽;一直看源码总是很爽。