2013-03-31 144 views
36

我正在用两步表单构建一个Angular JS应用程序。它实际上只是一种形式,但使用JavaScript隐藏第一个面板,并在用户单击“下一步”按钮时显示第二个面板,然后转到步骤2.我已在步骤1的某些字段上设置了“必需”验证,但很明显,他们当用户点击“下一步”按钮没有得到证实......他们得到验证时,“提交”按钮被点击的步骤结束2.Angular JS:在提交之前验证表单字段

有什么办法,我可以告诉角在单击“下一步”按钮时验证表单中的那些字段?

+1

如果你是通过AJAX提交,而不是默认的浏览器提交,可能会考虑分拆成2种形式。使第一种形式的'ng-submit'显示第二种形式。不知道这是否是最切实可行的方法,但肯定会简化编码并让角度做完全形式验证 – charlietfl

+0

是的,这就是我要做的。谢谢! – Andrew

回答

71

我建议使用子表单。 AngularJS支持将一个表单放入另一个表单中,并将有效性从低位形式传播到高位;

这里是例子:http://plnkr.co/edit/SruBmlGZZtbwiU8cktAp?p=preview

下面是一些代码,这样可以抓住的想法:

<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形式。 – Andrew

+1

+1个不错的例子 – GFoley83

+0

非常好的先生。很好的例子。使用它我自己 – Coldstar

相关问题