Angular 响应式(Reactive)验证

标签 angular angular-ui-router angular-material angular-directive

我是 Angular 的新手,我想知道 angular 6.0 中的响应式(Reactive)验证是如何工作的,我正在尝试进行过去 2 周的验证,有人可以帮我进行验证吗?并教我怎么做。

非常感谢您的帮助,谢谢 :)

import { Component } from '@angular/core';
import { ReactiveFormsModule, FormsModule, FormGroup, FormBuilder, FormControl, Validators  } from '@angular/forms';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'AngularProject';

  constructor(private fb:FormBuilder) 
  {}
  profileForm : FormGroup;
  submitted = false;
  ngOnInit(): void {
        this.profileForm= this.fb.group({
          firstName:['', [Validators.required]],
          EmailMe:['',[Validators.required]]
        });
  }

  onSubmit():void
  {
    this.submitted = true;
    if (this.profileForm.invalid) {
      return;
  }
    console.log(this.profileForm.value);
    alert('SUCCESS!! :-)\n\n' + JSON.stringify(this.profileForm.value))
  }
  get f() { 
    return  this.profileForm.controls; 
}}

HTML 部分如下。

<form class="form-horizontal" [formGroup]="profileForm" (ngSubmit)="onSubmit()">
  <div class="panel panel-primary">

    <div class="panel-heading">
      <h3 class="panel-title">C3</h3>
    </div>


  <div class="panel-body">
      <div class="form-group">
        <label class="col-sm-2 control-label" for="fullName">Full Name</label>
        <div class="col-sm-8">
          <input id="fullName" type="text" class="form-control" formControlName="firstName"
          [ngClass]="{ 'is-invalid': submitted && f.profileForm.errors }" >

          <div *ngIf="f.firstName.errors.required">First Name is required {{f.profileForm.errors}}</div>
          <div *ngIf=></div>
        </div>
      </div>

      <div class="form-group">
        <label class="col-sm-2 control-label" for="email">Email</label>
        <div class="col-sm-8">
          <input id="email" type="text" class="form-control" formControlName="EmailMe">
        </div>
      </div>

  </div>
    <div class="panel-footer">
      <button class="btn btn-primary" type="submit" [disabled]="!profileForm.valid">Save</button>
    </div>
  </div>
</form>
 <!--  -->

<router-outlet></router-outlet>

最佳答案

您的验证检查似乎有误。在这里,试一试:

<form 
  class="form-horizontal" 
  [formGroup]="profileForm" 
  (ngSubmit)="onSubmit()">

  <div class="panel panel-primary">

    <div class="panel-heading">
      <h3 class="panel-title">C3</h3>
    </div>


    <div class="panel-body">

      <div class="form-group">
        <label 
          class="col-sm-2 control-label" 
          for="fullName">
          Full Name
        </label>

        <div class="col-sm-8">
          <input 
            id="fullName" 
            type="text" 
            class="form-control" 
            formControlName="firstName">
          <div 
            *ngIf="profileForm.controls['firstName'].touched && profileForm.controls['firstName'].errors.required"
            >
            First Name is required
          </div>
        </div>
      </div>

      ...

    </div>

    ...

  </div>

</form>

Angular 还会自动将 ng-invalid 和 ng-touched 等类应用于无效和已触摸的表单控件。所以你可以利用它来简化你的 CSS:

input.ng-touched.ng-invalid {
  border: 1px solid red;
}

Here's a Working Sample StackBlitz for your ref.

关于 Angular 响应式(Reactive)验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57293147/

相关文章:

angular - 单击时清除 Angular Material 自动完成

javascript - Angular 5 Component 宿主元素上设置的属性在 jsPlumb 中不生效

angular - Angular Material(组件)中的条件按钮颜色属性

Angular Material - 同时通过多个过滤器和多个过滤器值过滤表

javascript - Angular Material 中 Mat-Menu 的自定义样式背景颜色

angular - 接口(interface) 'HTMLIonIconElement' 不能同时扩展类型 'IonIc on' 和 'HTMLStencilElement'

Angular4 Angular2 - XSRF 保护

javascript - 使用多个 View 时解析每个 Controller 的值

javascript - 如何从 Angular 范围调用外部 Controller

javascript - angularjs,ui-router访问状态url开头的参数