扫码枪原理:每次使用扫码枪相当于执行了输入扫码的字符+回车enter事件。
问题:在中文输入法下,输入扫码的字符,相当于在敲拼音,这会导致显示结果和扫码内容不一致的情况。
解决方法:利用输入框type="password"不能输入中文的属性,来解决,为此封装一个专用于扫码枪的输入框,代码如下:
<script>
export default {
name: "ScanCodeInput",
props: {
value: {
type: String,
default: () => ""
}
},
data () {
return {
inputValue: null
}
},
computed: {
inputType () {
// 通过判断输入框内是否有值,来切换输入框类型
return this.inputValue ? "text" : "password"
}
},
watch: {
value: {
handler (val) {
this.inputValue = val
},
deep: true,
immediate: true
}
},
methods: {
handleChange (e) {
this.$emit('input', e.target.value)
},
handlePressEnter () {
this.$emit('pressEnter')
}
},
render () {
return <a-input
ref="input"
vModel={this.inputValue}
type={this.inputType}
onChange={this.handleChange}
onPressEnter={this.handlePressEnter}
{ ...{ props: { ...this.$attrs } } }
/>
}
}
</script>
备注:原a-input所有的api都可用在此输入框中