2013-03-31 4 views
36

2ステップフォームでAngular JSアプリを構築しています。これは実際には1つのフォームですが、JavaScriptを使用して最初のパネルを非表示にし、ユーザーが「次へ」ボタンをクリックしてステップ2に進むと、2番目のパネルを表示します。ステップ1、ユーザーが「次へ」ボタンをクリックしたときに検証されないことは明らかです。ステップ2の最後に「送信」ボタンがクリックされたときに検証されます。Angular JS:送信前にフォームフィールドを検証する

角度がわかる方法はありますか'次へ'ボタンをクリックしたときにフォーム内のフィールドを検証しますか?

+1

あなたがAJAX経由で提出されている場合ではなく、デフォルトのブラウザが提出:あなたのアイデアを把握することができるようにhttp://plnkr.co/edit/SruBmlGZZtbwiU8cktAp?p=previewここ

はいくつかのコードです:ここでは

は一例です。最初のフォームの 'ng-submit'を2番目のフォームを表示します。これが最も実用的な方法であるかどうかは確かではありませんが、コーディングが単純化され、角度がフルフォームの検証を行うことができます。 – charlietfl

+0

ええ、これは私がやることです。ありがとう! – Andrew

答えて

71

サブフォームを使用することをお勧めします。 AngularJSはあるフォームを別のフォームの内側に置くことをサポートし、有効性は下のフォームから上に伝播します。 2つのフォームに分割を検討するかもしれない、

<form name='myform' ng-init="step = 1"> 
    <div ng-show="step==1"> 
     <h3>Step 1: Enter some general info</h3> 
     <div ng-form='step1form'> 
     Name: <input ng-model="name" required> 
     </div> 
     <button ng-disabled="!step1form.$valid" ng-click="step = 2">Next</button> 
    </div> 

    <div ng-show="step==2"> 
     <h3>Step 2: Final info</h3> 
     <div ng-form="step2form"> 
      Phone: <input ng-model="phone" required> 
     </div> 
     <button ng-click="step = 1">Prev</button> 
     <button ng-disabled="!myform.$valid" ng-click="submit()">Submit</button> 
    </div> 
    <div> 
     Validation status: 
     <div> Whole form valid? {{myform.$valid}} </div> 
     <div> Step1 valid? {{step1form.$valid}} </div> 
     <div> Step2 valid? {{step2form.$valid}} </div> 
    </div> 
    </form> 
+0

このアプローチを使用して終了しました。ありがとう! ng-formについての考えはありませんでした。 – Andrew

+1

+1良い例 – GFoley83

+0

非常に良いサー。素晴らしい例。 – Coldstar

関連する問題