我有一个用于扫描条形码的表单。当输入一个时,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
设置为pristine
和invalid
,即使barcode
设置为2222
,也应如此。
简而言之,我如何两次提交相同的表格?
谢谢!
答案 0 :(得分:0)
您的代码看起来很好。但是,在第一个进程完全完成之前或在摘要周期完成之前,有可能第二次调用addBarcode。 Myabe你需要尝试$ timeout这样的。 vm.addBarcode = $ timeout(函数(表单,条形码){ 如果(形式$有效){ 的console.log(&#34;没关系&#34); ... //将条形码添加到条形码数组中 } });