2016-10-10 2 views
0

Ich habe ein Formular, das zum Scannen von Barcodes verwendet wird. Wenn einer eingegeben wird, löst eine Funktion aus und liest das Formular und den Barcode ein. Wie so:

<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> 

Und dann die Steuerung:

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

Beachten Sie, dass die Lage nicht nach Formularübermittlung nicht ändert. Der neue Barcode wird einfach auf ein Array von vorhandenen Barcodes geschoben und dann in einer Tabelle unter dem Formular angezeigt. Das ist der Schlüssel, denke ich.

Das obige funktioniert, aber nur für die erste Barcode gescannt, sagen 1111. Dann scanne ich einen zweiten Barcode, sagen wir 2222. Jetzt ist form auf pristine und invalid eingestellt, obwohl die barcode auf 2222 eingestellt ist, wie es sein sollte.

Kurz gesagt, wie kann ich dasselbe Formular zweimal einreichen?

Danke!

+0

Entfernen Sie die Verwendung von nativen Dom-Validitätsmethoden und verwenden Sie nur eckige. Es gibt nie einen Grund, "onchange", "oninvalid", "onclick" usw. in angular zu verwenden. In der Tat sollte "novalidate" auf Formular verwenden und eckig alles verwalten lassen – charlietfl

Antwort

0

Ihr Code sieht gut aus. Es besteht jedoch die Möglichkeit, dass der zweite Aufruf von addBarcode erfolgt, bevor der erste Prozess vollständig abgeschlossen ist oder bevor der Digest-Zyklus abgeschlossen ist. Myabe musst du $ timeout so versuchen. vm.addBarcode = $ timeout (function (Form, Barcode) { if ($ Form gültig) { console.log ("okay".), ... // fügen Sie den Barcode auf ein Array von Barcodes } });

Verwandte Themen