开发PDA实现扫描录入,由于uniapp不支持原生input的keydown事件,所以无法判断回车键。
这边使用的是 @confirm事件,实现回车提交,但是测试中遇到了问题,每扫描几次就会间隔性出现 input未被清空的情况,就会导致和下次扫描数据一起提交。实际测试发现如果使用软键盘提交回车没有出现这种情况,怀疑可能扫描录入的数据填充的比较快。因为这个问题研究了很多天,并在社区搜索相关解决方案,目前碰到的最妥善的方法可能就是监听广播,直接原生获取扫描数据。
但是根据大家的描述来看,广播模式似乎只支持 android 8.0 以上的设备,而我测试的PDA版本为5.1,在设置中也确实没有找到相关设置,如果使用该方式可能需要更换设备,所以广播应为最后的处理手段。实际上采集录入的最佳方式还是直接扫描到录入框,但是受到框架的一定限制让我感到十分无奈。
不过就在刚才我突然灵机一动,既然input无法更新视图,清空录入框中的数据,那我为什么不使用 v-if 将他们重新渲染呢?最终经过测试,完美实现预期效。
<view v-if="bool">
<input class="input" @confirm="confirm1" v-model="value" key="1" auto-focus="autofocus" />
</view>
<view v-else>
<input class="input" @confirm="confirm1" v-model="value" key="2" auto-focus="autofocus" />
</view>
当然目前只是通过的测试,无法保证在后面实际应用中会导致什么异常,先将方法分享出来,如果有异常我再继续在帖子下面回复,如果大家有更好的方式也请分享给我一下,十分感谢!
附件我上传了测试的视频