javascript - 使用 Angular 2 进行动态表单验证

标签 javascript html validation angular angular2-forms

我正在开发 Angular 2 应用程序,并在小节模板中动态创建表单字段(使用 json)。
我想在表单无效时禁用提交按钮。

<h1>Form Validation</h1>
<div >
<form #loginForm="ngForm">
    <subsection [question]="fieldsData"></subsection>
    <button  type="submit"  [disabled]="!loginForm.form.valid">Submit</button>
</form>
</div>

子部分如下

<div *ngFor="let data of question">
<label> {{data.displayName}}</label>
<input type="data.dataType" name="data.fieldId" [(ngModel)]="data.fieldValue" required name="data.fieldId" #name="ngModel">
<div *ngIf="name.errors && (name.dirty || name.touched)" class="alert alert-danger">
    <div [hidden]="!name.errors.required">
        Name is required
    </div>     
</div>
<br><br>

我有一个要求,即在填写所有必填字段后应启用提交按钮

已创建 plunker 链接 Here

最佳答案

根据你的 plunkr,我认为使用 reactive form 会更好。而不是您所描述的模板驱动表单方法,因为您无论如何都在模型中定义表单字段( fieldsData 中定义的 AppComponent 数组)。

当前的模板方法无法为您提供所需的验证行为 input子组件中的字段不参与更广泛的形式 - 如果您调试 loginForm.value您将看到名称字段不是表单的一部分 - 这意味着如果您提交表单,表单将不包含在这些字段中输入的数据。

另一种方法是通过实现 ControlValueAccessor 让子组件参与表单如上所述here但这会增加您可能不需要的复杂性。

更简单的方法是 (1) 使用响应式(Reactive)表单或 (2) 根本不使用嵌套的小节组件。

<form #loginForm="ngForm">

   <div *ngFor="let data of fieldsData">
      <label> {{data.displayName}}</label>
      <input type="data.dataType"  [(ngModel)]="data.fieldValue" required       [name]="data.fieldId" #name="ngModel">
      <div *ngIf="name.errors && (name.dirty || name.touched)" class="alert alert-danger">
          <div [hidden]="!name.errors.required">
              {{data.displayName}} is required
          </div>     
      </div>
      </div>
   <button  type="submit"  [disabled]="!loginForm.form.valid">Submit</button>

   Form contains: {{loginForm.value | json }}

</form>

关于javascript - 使用 Angular 2 进行动态表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42836550/

相关文章:

Javascript TextBox 输入值未更新

javascript - 使用 Three.js 在 3D 场景中绘制不规则的水

javascript - Firestore OrderBy 和Where 冲突

javascript - js中的个人表单验证,带有警告消息

c# - 在 DDD 项目中放置安全验证的正确位置

javascript - 如何使用 javascript 找到某一天属于星期几?

html - 轨道 slider 中的中心文本和按钮元素?

html - 我如何设置 HTML INPUT 标签的样式,以便它在专注于 Android 2.2+ 时保持 CSS?

javascript - Firefox 无法正确显示图像 (CSS + HTML)

asp.net - 内联脚本在 ASP.Net 自定义控件中无法解析