2016-10-10 15 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となります。次に、2番目のバーコード、たとえば2222をスキャンします。 が2222に設定されていても、formpristineinvalidの両方に設定されています。

簡単に言えば、同じフォームを2回送信するにはどうすればよいですか?

ありがとうございます!

+0

ネイティブのDOM有効性メソッドを使用して除外し、角度のあるものだけを使用します。 'onchange'、' oninvalid'、 'onclick'などを使用する理由は絶対にありません。実際にはフォーム上で 'novalidate'を使用して、角度ですべて管理してください – charlietfl

答えて

0

コードは正常です。しかし、addBarcodeの2回目の呼び出しは、最初のプロセスが完全に完了する前、またはダイジェストサイクルが完了する前に起こった可能性があります。 Myabeこのような$ timeoutを試す必要があります。 vm.addBarcode = $タイムアウト(関数(フォーム、バーコード){ 場合(フォーム有効$){ はconsole.log( "オーケー")。 ... //バーコード のアレイにバーコードを追加します} });

関連する問題