同一页面上两个表单的AngularJS验证

同一页面上两个表单的AngularJS验证,angularjs,Angularjs,我在同一页上有两个表单需要验证。问题是其中一个表单正在进行数据绑定,以便我可以使用$invalid检查它是否有效。但另一个表单似乎没有绑定,无法调用其上的任何方法($dirty、$invalid等) 以下是我的html页面的一个片段: <form name="checkoutShippingForm" role="form" novalidate> <div class="row">

我在同一页上有两个表单需要验证。问题是其中一个表单正在进行数据绑定,以便我可以使用$invalid检查它是否有效。但另一个表单似乎没有绑定,无法调用其上的任何方法($dirty、$invalid等)

以下是我的html页面的一个片段:

<form name="checkoutShippingForm" role="form" novalidate>
                    <div class="row">
                        <div class="col-md-4">
                            <label for="txtAddress1">Address 1:</label>
                        </div>
                        <div class="col-md-8">
                            <input type="text" name="txtAddress1" data-ng-model="vm.Shipping.Address.AddressLine1" required />
                            <div class="error" data-ng-show="checkoutShippingForm.txtAddress1.$dirty && checkoutShippingForm.txtAddress1.$invalid">
                                <small class="error" data-ng-show="checkoutShippingForm.txtAddress1.$error.required">An Address is required.</small>
                            </div>
                        </div>
                    </div>
                    Invalid? {{checkoutShippingForm.$invalid}}  <!--Doesn't show -->
</form>

<form name="checkoutBillingForm" role="form" novalidate>
                    <div class="row">
                    <div class="col-md-4">
                        <label for="txtBillingAddress1">Billing Address 1:</label>
                    </div>
                    <div class="col-md-8">
                        <input type="text" id="txtBillingAddress1" name="txtBillingAddress1" data-ng-model="vm.Billing.Address.AddressLine1" required />
                        <div class="error" data-ng-show="checkoutBillingForm.txtBillingAddress1.$dirty && checkoutBillingForm.txtBillingAddress1.$invalid">
                            <small class="error" data-ng-show="checkoutBillingForm.txtBillingAddress1.$error.required">An Address is required.</small>
                        </div>
                    </div>
                </div>
                    invalid: {{checkoutBillingForm.$invalid}}  <!--Shows true -->
</form>

地址1:
需要一个地址。
无效的{{checkoutShippingForm.$invalid}}
账单地址1:
需要一个地址。
无效:{{checkoutBillingForm.$invalid}
请参见下文

替换

   <div class="error" data-ng-show="checkoutBillingForm.txtBillingAddress1.$dirty && checkoutBillingForm.txtBillingAddress1.$invalid">

地址1:
需要一个地址。
无效的{{checkoutShippingForm.$invalid}}
账单地址1:
需要一个地址。

您可以在一个页面中多次使用ng表单

HTML:

这里看起来不错。。
   <div class="error" data-ng-show="checkoutBillingForm.txtBillingAddress1.$dirty || checkoutBillingForm.txtBillingAddress1.$invalid">
<ng-form name="scope.form">
            <div>
                <table>
                    <tbody>
                        <tr>
                            <td class="col-md-3">
                                <div class="label-color">HEADER NAME <span class="red"><strong>*</strong></span></div>
                            </td>
                            <td class="col-md-9">
                                <input type="text" name="headerName" id="headerName" ng-change="scope.checkHeaderName(header.headerName)"
                                    ng-model="header.headerName" maxlength="50" class="form-control" required>
                                <div ng-show="scope.form.$submitted || scope.form.headerName.$touched">
                                    <span ng-show="scope.form.headerName.$error.required" class="label-color validation-message">Header Name is required</span>                                        
                                </div>
                            </td>
                        </tr>                            
                        <tr>
                            <td class="col-md-3">
                                <div class="label-color">HEADER DESCRIPTION <span class="red"><strong>*</strong></span></div>
                            </td>
                            <td class="col-md-9">
                                <textarea name="headerDesc" id="headerDesc" ng-model="header.headerDesc" class="form-control" maxlength="50" required rows="3" cols="15"></textarea>
                                <div ng-show="scope.form.$submitted || scope.form.headerDesc.$touched">
                                    <span ng-show="scope.form.headerDesc.$error.required" class="label-color validation-message">Header description is required</span>
                                </div>
                            </td>
                        </tr>
                    </tbody>
                </table>                    
            </div>
        <button ng-click="scope.changePage(2)" type="button" class="btn btn-default pull-right">Next</button>
        </ng-form>


        <ng-form name="scope.supervisionform">               
            <div class="supervision-search-block">                                                
                <div class="input-group">
                    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">
                        <div class="form-group">
                            <div class="label-color">CERTIFICATE NUMBER (LAST 6 DIGITS) <span class="red"><strong>*</strong></span></div>
                            <input type="text" maxlength="6" pattern="[0-9]{6}" name="licenseNumber" id="licenseNumber" class="form-control" ng-model="scope.licenseNumber" required />
                            <span ng-show="(scope.supervisionform.licenseNumber.$dirty && scope.supervisionform.licenseNumber.$error.required)" class="help-block">License Number is required</span>
                            <span ng-show="scope.supervisionform.licenseNumber.$dirty && scope.supervisionform.licenseNumber.$error.pattern" class="help-block">Please provide only 6 digits</span>
                        </div>
                    </div>
                    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">
                        <div class="form-group">
                            <div class="label-color">LAST NAME <span class="red"><strong>*</strong></span></div>
                            <input type="text" maxlength="20" name="lastName" id="lastName" class="form-control" ng-model="scope.lastName" required/>
                            <span ng-show="scope.supervisionform.lastName.$dirty && scope.supervisionform.lastName.$error.required" class="help-block">Last Name is required</span>
                        </div>
                    </div>
                    <span class="input-group-btn">                                
                        <button type="button"                                             
                            ng-click="scope.validateSupervisionCertificate()" 
                            class="btn btn-primary">Search
                        </button>                            
                    </span>
                </div>                                        
            </div>
            <div>                    
                <button ng-click="scope.submitPlantReg();" type="button" class="btn btn-default pull-right">Submit</button>
            </div>
        </ng-form>
changePage(pageNumber) {
    let self = this;

    if (self.form && self.form.headerName.$invalid) {
        self.form.premise.$setDirty();
        self.form.premise.$setTouched();
        return;
    }

    if (pageNumber == 2) {
        Do something..
    }        
}

submitPlantReg() {
    let self = this;

    // Supervision verification form validation
    if (scope.supervisionForm.supervisionType.$invalid || scope.supervisionForm.licenseNumber.$invalid || scope.supervisionForm.lastName.$invalid ||
        scope.supervisionForm.contractorName.$invalid || scope.supervisionForm.contractorClass.$invalid) {
        scope.supervisionForm.$setDirty();
        scope.supervisionForm.licenseNumber.$setDirty();
        scope.supervisionForm.lastName.$setDirty();
        scope.supervisionForm.contractorName.$setDirty();
        scope.supervisionForm.contractorClass.$setDirty();
        scope.supervisionForm.$setSubmitted();
        return;
    }

    Do something else...
}