uniapp 扫描枪获取条码不全解决办法,vue组件,使用双向绑定,回车事件触发,获取文本不全问题

原因分析:

uniapp使用vue,双向绑定组件,在input标签loop事件循环获取文本的过程中,读取文本信息不是顺序读取,如果条码中包含了回车键,比如扫描枪,扫描文本后会追加回车键,监控文本读取还没有读取完所有文本,先读取到了回车,触发了相应的回车事件导致
关键点:confirm回车事件先于 data属性值绑定,事件触发时,data值还没有完全绑定完
关键代码:在input标签中传递事件对象,通过事件多谢直接获取值,此时值是完整的
在这里插入图片描述
在这里插入图片描述

BinderConfirm(e) {
				let binderCode = e.target.value
				// console.log(binderCode)
				this.tetsCode.binderText = this.tetsCode.binderText + "\n" + binderCode
				this.blurfun();
			}
unBinderConfirm(e) {
				//获取文本框条码
				let text = e.target.value
				// this.barCode = e
				// console.log(text)
				this.tetsCode.unbinderText = this.tetsCode.unbinderText + "\n" + text
			}

解决方案

1.不使用双向绑定

uniapp使用vue,对于扫码后,数据的重置空,不使用绑定,很难操作,第一种方案的清空重置,在html5上可以使用,在打包apk后无法使用,相对不完美

2.使用双向绑定

相对第一种更方便对数据进行清理重置,比较符合不停扫码的场景

在这里插入图片描述

上代码,barcodeTest.vue

<template>
	<view class="uni-common-mt">
		<view class="uni-padding-wrap">
			<view class="cu-form-group">
				<view class="title">未绑定2:</view>
				<input class="input" type="text" :focus="tetsCode.isfocus2" @blur="tetsCode.isfocus2 = false" id="codeTest1" ref="inputCode" @confirm="unBinderConfirm($event)"></input>
			</view>
			<view class="uni-textarea" style="background-color: white;">
				<textarea v-model="tetsCode.unbinderText" style="color: black;" />
			</view>
			<view class="tag-view panel-full margin-top">
				<uni-tag text="清空条码" type="success" @click="clearBarCode()" />
			</view>
			<view class="tag-view panel-full margin-top">
				<uni-tag text="清空" type="success" @click="tetsCode.unbinderText = '未绑定文本:'" />
			</view>
			<view class="cu-form-group">
				<view class="title" style="color: red;">双向绑定:</view>
				<input ref="testBinderCode" v-model="tetsCode.binderCode" :focus="tetsCode.isfocus" @confirm="BinderConfirm($event)" class="input" type="text"
					name="codeTest2" style="color: red;" @blur="blurfun()"></input>
			</view>
			<view class="uni-textarea" style="background-color: white;">
				<textarea  v-model="tetsCode.binderText" style="color: red;" />
			</view>
			<view class="tag-view panel-full margin-top">
				<uni-tag text="清空" type="success" @click="tetsCode.binderText = '双向绑定文本:'" />
			</view>
			<view class="tag-view panel-full margin-top">
				<uni-tag text="清空绑定条码" type="success" @click="setValue2()" />
			</view>
			<view class="cu-form-group">
				<view class="title" style="color: green;">主机名:</view>
				<input v-model="tetsCode.host"  class="input" type="text" name="codeTest2"
					style="color: green;"></input>
			</view>
			<view class="tag-view panel-full margin-top">
				<uni-tag text="获取" type="error" @click="download3()" />
			</view>
		
		</view>
	</view>
	</view>
</template>

<script>
	import permision from "@/common/js/permission.js"
	import uniTag from '@/components/uni-ui/uni-tag/uni-tag.vue';
	import UniIcons from '@/components/uni-ui/uni-icon/uni-icon.vue'
	import UniNumberBox from '@/components/uni-ui/uni-number-box/uni-number-box.vue'

	import uniIcon from '@/components/uni-icon/uni-icon.vue'
	import tTable from '@/components/t-table/t-table.vue';
	import tTh from '@/components/t-table/t-th.vue';
	import tTr from '@/components/t-table/t-tr.vue';
	import tTd from '@/components/t-table/t-td.vue';
	

	export default {
		components: {
			uniTag,
			UniIcons,
			UniNumberBox,
			uniIcon,
			tTable,
			tTh,
			tTr,
			tTd
		},
		onLoad(e) {

		},
		data() {

			return {
				tetsCode: {
					binderCode: "123",
					binderText: "双向绑定文本:",
					unbinderText: "未绑定文本:",
					host: "172.30.162.129",
					isfocus:true,
					isfocus2:false,
					barCode:"132"
				}
			}
		},
		onLoad() {
			//this.circleRodObjList = []
		},
		methods: {
			unBinderConfirm(e) {
				//获取文本框条码
				let text = e.target.value
				// this.barCode = e
				// console.log(text)
				this.tetsCode.unbinderText = this.tetsCode.unbinderText + "\n" + text
			},
			BinderConfirm(e) {
				let binderCode = e.target.value
				// console.log(binderCode)
				this.tetsCode.binderText = this.tetsCode.binderText + "\n" + binderCode
				this.blurfun();
			},
			clearBarCode(){
				this.$refs.inputCode.valueSync = ""
				this.tetsCode.isfocus2 = true
				// this.barCode.target.text = ""
				// var obj = document.getElementById('codeTest1') ;
				// obj.outerText = ""
				// obj.focus()
				// obj.outerHTML="";
				// const query = uni.createSelectorQuery().in(this);
				// let select = query.select('#codeTest1')
				// select._component.$refs.inputCode.valueSync = ""
				// query.select('#codeTest1').boundingClientRect(data => {
				// 	console.log(data)
				// }).exec();

			}
			,
			download3() {
				let downUrl = "http://" + this.tetsCode.host + ":8088/webapp/service/apk/downloadLastFile2"
				plus.runtime.openURL(downUrl)
			},
			setValue(){
				let input = this.$refs['inputCode'];
				let value = input.valueSync
				// let value = "aaaa"+input.toString()
				// uni.showModal({
				// 	title: "refs对象",
				// 	duration: 1000,
				// 	content: value,
				// 	showCancel: false,
				// 	success() {
				// 		uni.hideLoading()
				// 	}
				// })
				input.valueSync = ""
				// input.focus = true
				 // var obj = document.getElementById("codeTest1");
				 // obj.valueSync = ""
				// this.barCode = "";
				// var obj = document.getElementById('codeTest1') ;
				// obj.focus()
				// obj.value = ""
			},
			// onInput(e){
			// 	// this.barCode.target.value = e.target.value
			// }
			setValue2()
			{
				this.tetsCode.binderCode = ""
				this.tetsCode.isfocus = true
			},
			blurfun(){
				this.tetsCode.isfocus = false
			}
		}
	}
</script>
<style>
	.uni-padding-wrap {
		width: 100%;
		padding: 0 20upx;
	}

	.uni-common-mt {
		width: 100%;
	}

	.cu-form-group {
		width: 100%;
		margin: 20upx 0;
	}

	.scroll-view_H {
		width: 200;
		display: flex;
		flex-wrap: nowrap;
	}

	.scrollx_items {
		text-align: center;
		display: inline-block;
		width: 210rpx;
		box-sizing: border-box;
		margin-left: 30rpx;
		margin-top: 3px;
	}

	.t-td {

		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;

	}

	.t-th {
		width: 180px;
	}

	.tap-button-text {
		color: darkcyan
	}

	.radio_mat {

		margin-left: 40upx;
	}
</style>

3.修改双向绑定策略,或者自己封装双向绑定组件解决问题,由于时间问题,暂未实现

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
课程概述: 本课程是一个小型的vue周边技术+以php为基础的+微信接口开发的小型项目。本项目以微信扫码关注公众号实现网站自动登陆这一功能为载体,将会讲解如下主要核心知识点:前端你将学习到: 一、vue-cli4进行前端项目的创建 二、如何使用vuex进行登陆信息的管理与同步 三、如何使用axios进行接口请求的封装与拦截 四、在脚手架里使用Element-UI 五、学习组件化编程的思想 六、如何解决接口前后端分离引起的跨域问题以及在跨域下使用cookie凭证进行会话维护 后端你讲学习到: 一、如何申请微信公众号测试账号,如何进行相关参数的配置,如何进行微信相关接口的开发 二、如何使用微信接口开发,如获取临时二维码,获取用户基础信息,监听公众号关注以及扫描事件 三、如何使用redis对数据进行缓存 四、如何使用php原生代码进行接口的开发 五、如何使用laralvel 7.x 框架进行接口的开发 六、学习到laravel 中核心概念的使用方法,如什么是依赖注入,如何使用服务容器解决依赖注入、服务提供者、中间件的使用,如何处理请求数据,如何进行用户认证,以及如何使用Eloquent ORM进行数据库操作 七、开发过程中遇到的问题,如何进行排查 八、git远端仓库的建立与配置,如何在配置多仓库下的公钥,服务器端部署公钥的配置,如何进行代码部署,本地与服务器代码的开发实时同步 九、如何使用composer帮助我们进行第三方依赖包的安装 本课程的设计思路随笔: 从业务层面上来讲,扫码关注公众号,实现网站端自动登陆是一个非常实用的功能,可以为微信公众号引流。 技术层面上来说,使用前后端分离进行制作,可以将前端以及后端的知识都涵盖到。对于前端的路由,信息维护,脚手架的搭建,ui组件使用,接口的请求与封装都能够讲解到。 对于后端,本课程对php原生代码以及工作中使用频率比较高的同时也很优雅的laravel框架都会进行讲解,分别予以代码的实现。让同学们能够看到原生开发与框架开发的区别,原生开发使得基础比较弱的同学能够慢慢上手,也知道此功能实现的核心要点,在进行原生代码开发后,再进行框架开发,会有个循序渐进的过程,同时在框架里面我们会降到主流框架都会用到的一些核心思想,比如依赖注入,服务容器,中间件等等,同时对于想学习laravel框架的同学,学习过这个案例后,再去看文档就知道该如何去看,如何去学了。 对于整个代码的管理与部署,我们也会引入git仓库进行项目代码管理,如何在服务器进行网站环境的搭建与代码部署等等实用技巧。 相信本课程会给大家带来十足的收获,大家加油。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JerryLXu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值