2016-10-10 27 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( “好”);。 ... //条形码添加到条形码 的阵列} });