掃碼槍是模擬鍵盤輸入的,所有事件為document.onkeypress = function(){}.
在vue項目中,是沒有window.onload的,所以在created鈎子函數中做:
var b = ""; var _this = this; document.onkeydown = function() { if (event.keyCode != 13) { var bizCode = String.fromCharCode(event.keyCode); if (event.keyCode >= 48 && event.keyCode <= 122) { b = b + bizCode; } } else { b = ""; } _this.msg = b; };
在document.onkeydown中獲取了條碼的值,此時的值是,6,65,657,6579,65794,657943,6579435...按照按鍵依次展示出來的。
如果需要條碼值與頁面中其他值一起做數據處理,則需要監聽;
在watch中,需要了解一下immediate和handler.如果在最初綁定某值時就需要執行函數,就需要用到immediate屬性。
1 watch:{ 2 msg:{ 3 handler(oldValue, newValue){ 4 //由於此時掃描出的值是一個字符一個字符累加的,所有用一個數組裝起來。 5 var arry = [] 6 arry.push(this.msg) 7 for(var i = 0; i < arry.length; i++){ 8 //...做判斷,調接口什么的,隨業務邏輯寫了 9 } 10 } 11 }, 12 immediate: true 13 }
還有一點,就是多次掃碼會產生疊加,在document.onkeydown的最下方將msg清空即可。