2016-10-10 41 views
0

我有一個表單用於掃描條形碼。當輸入一個時,一個ng-click函數觸發並讀入表單和條形碼。像這樣:

<form name="vm.form"> 
    <input ng-model="vm.scannedBarcode" 
     required 
     oninvalid="this.setCustomValidity('Please enter a barcode number')" 
     onchange="this.setCustomValidity('')" 
     type="text"> 
    <input type="submit" 
     ng-click="vm.addBarcode(vm.form, vm.scannedBarcode)" 
     value="Add">  
</form> 

然後,控制器:

vm.addBarcode = function(form, barcode) { 
    if(form.$valid){ 
     console.log("okay"); 
     ... 
     // add the barcode to an array of barcodes 
    } 
} 

注意,位置表單提交後不會改變。新的條形碼被壓入現有條形碼陣列中,然後顯示在表格下方的表格中。我認爲這是關鍵。

以上工作,但僅限於第一個條形碼掃描,比如1111。然後我掃描第二個條形碼,例如2222。現在form被設置爲pristineinvalid,儘管barcode設置爲2222,因爲它應該是。

簡而言之,我該如何兩次提交相同的表單?

謝謝!

+0

擺脫使用本機dom有效性的方法,只使用有角度的方法。永遠不要有任何理由在角度上使用'onchange','oninvalid','onclick'等。實際上應該在表單上使用'novalidate'並讓角度管理這一切 – charlietfl

回答

0

你的代碼看起來不錯。但是有可能第二次調用addBarcode發生在第一個進程完全完成或摘要循環完成之前。你需要嘗試像這樣的$超時值。 vm.addBarcode = $超時(功能(形式,條形碼){ 如果(形式$有效){ 的console.log( 「好」);。 ... //條形碼添加到條形碼 的陣列} });