当前位置: 首页 > 工具软件 > ng-dynamic > 使用案例 >

ng-form

殳俊
2023-12-01

ng-form用来在一个表单内部嵌套另一个表单。普通的HTML <form>标签不允许嵌套,但ng-form可以。

这意味着内部所有的子表单都合法时,外部的表单才会合法。这对于用ng-repeat动态创建表单是非常有用的。

由于不能通过字符插值来给输入元素动态地生成name属性,所以需要将ng-form指令内每组重复的输入字段都包含在一个外部表单元素内。

下面的CSS类会根据表单的验证状态自动设置:

表单合法时设置ng-valid;
表单不合法时设置ng-invlid;
表单未进行修改时设置ng-pristion;表单进行过修改时设置ng-dirty

Angular不会将表单提交到服务器,除非它指定了action属性。要指定提交表单时调用哪个JavaScript方法,使用下面两个指令中的一个。

ng-submit:在表单元素上使用。
ng-click:在第一个按钮或submit类型(input[type=submit])的输入字段上使用。

为了避免处理程序被多次调用,只使用下面两个指令中的一个。

下面的例子展示了如何通过服务器返回的JSON数据动态生成一个表单。我们用ng-loop来遍历从服务器取回的所有数据。由于不能动态生成name属性,而我们又需要这个属性做验证,所以在循环的过程中会为每一个字段都生成一个新表单。

由于AngularJS中用来取代<form>ng-form指令可以嵌套,并且外部表单在所有子表单都合法之前一直处于不合法状态,因此我们可以在动态生成子表单的同时使用表单验证功能。是的,鱼和熊掌可以兼得。

下面先看一下我们硬编码的JSON数据,把它假设成是从服务器返回的: 

angular.module('myApp',[])
.controller('FormController',function($scope) {

$scope.fields = [
{placeholder: 'Username', isRequired: true},{placeholder: 'Password', isRequired: true},{placeholder: 'Email (optional)', isRequired: false}

];

    $scope.submitForm = function() {
        alert("it works!");

};}); 

下面用这些数据生成一个有验证功能的动态表单:
<form name="signup_form"
    ng-controller="FormController"
    ng-submit="submitForm()" novalidate>
    <div ng-repeat="field in fields"
            ng-form="signup_form_input">
        <input type="text"
            name="dynamic_input"
            ng-required="field.isRequired"
            ng-model="field.name"
            placeholder="{{field.placeholder}}" />
      <div
            ng-show="signup_form_input.dynamic_input.$dirty &&
            signup_form_input.dynamic_input.$invalid">
            <span class="error"

ng-show="signup_form_input.dynamic_input.$error.required">The field is required.

            </span>
        </div>
    </div>
    <button type="submit"
        ng-disabled="signup_form.$invalid">
           Submit All
    </button>
</form>
input.ng-invalid {
    border: 1px solid red;

}

input.ng-valid {
    border: 1px solid green;


 类似资料: