I’ve stumbled upon an interesting case in a web-module, designed for both user- and machine-input (via a barcode scanner). Here is the code from Vue’s module:
<input class="form-control" v-model="barcode" id="barcode-scanner" @keyup.enter="parseBarcode" />
parseBarcode(){ // validates barcode (string) myAPI.getBarcodeId(this.barcode).then(({data}) => { if (data.errors) { this.showError() } else { // do some work and focus on input this.focusBarcodeInput(); } }) },
The scanner can trigger keyup.enter
at the end, but it inputs the barcode so fast, that the model does not update. Only by adding 10 ms delay after the input (custom setting in the scanner) and then sending keyup.enter
, everything is working as expected.
The big question is: how can I “slow down” scanner’s input instead of tweaking the scanner settings (obviously not convenient for other cases)?
Best regards
Advertisement
Answer
Try calling it in this.$nextTick :
parseBarcode () { this.$nextTick(() => { myAPI.getBarcodeId(this.barcode).then(({data}) => { if (data.errors) { this.showError() } else { // do some work and focus on input this.focusBarcodeInput(); } }) }); }