Html 无表单标记的角度表单验证

Html 无表单标记的角度表单验证,html,angular,forms,Html,Angular,Forms,我正在准备一份登记表。我必须在不使用表单标签的情况下完成它 我已经完成了这项注册: <div class="row"> <div class="center col-xs-8 col-xs-offset-2"> <p class="h5 text-center mb-4">{{ 'Signup' | translate }}</p> <div class="form-group">

我正在准备一份登记表。我必须在不使用表单标签的情况下完成它

我已经完成了这项注册:

<div class="row">
    <div class="center col-xs-8 col-xs-offset-2">

        <p class="h5 text-center mb-4">{{ 'Signup' | translate }}</p>

        <div class="form-group">
            <label for="email">{{ 'SignupEmail' | translate }}</label>
                <input type="text" [(ngModel)]="user.email" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.email.errors }" />
                <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
                    <div *ngIf="f.email.errors.required">Email is required</div>
                    <div *ngIf="f.email.errors.email">Email must be a valid email address</div>
                </div>
            </div>
            <div class="form-group">
                <label for="username">{{ 'SignupUsername' | translate }}</label>
                <input type="text"  [(ngModel)]="user.name" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.email.errors }" />
            </div>
            <div class="form-group">
                <label for="password">{{ 'SignupPassword' | translate }}</label>
                <input type="password"  [(ngModel)]="user.password" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.email.errors }" />
            </div>
            <div class="form-group">
                <label for="birth">{{ 'SignupBirth' | translate }}</label>
                <input type="date"  [(ngModel)]="user.dateNaissance" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.email.errors }" />
            </div>
            <div class="form-group">
                <button [disabled]="loading" class="btn btn-info" (click)="onSubmit()" >{{ 'SignupSubmit' | translate }}</button>
                <img *ngIf="loading" src="data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==" />
                <div class="text-center">
                  {{ 'SignupAccount1' | translate }} <a routerLink="/login">{{ 'SignupAccount2' | translate }}</a>
                </div>
            </div>
        </div>
    </div>
您能否帮助我验证此表单(但不添加表单标记)


谢谢大家!

您使用了被动表单,所以在div中使用
[formGroup]
,在该div中使用
formControlName
来实现验证

在这里,我创建了一个带有验证且没有
form
标记的反应式表单演示


由于您的输入未注册,表单控件。。。您在字段中键入的任何内容都不会填充表单,因此它当然无效,因为表单字段为空;)@我错过了什么?name=“电子邮件”?
import {Component, OnInit} from '@angular/core';
import {FormGroup, FormBuilder, Validators} from '@angular/forms';
import {first} from 'rxjs/operators';
import {Router} from '@angular/router';
import {AlertService} from '../services/alert.service';
import {UserService} from '../services/user.service';

@Component({
  selector: 'app-register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.sass']
})
export class RegisterComponent implements OnInit {

  registerForm: FormGroup;
  loading = false;
  submitted = false;
  user: any;


  constructor(private fb: FormBuilder, private router: Router, private userService: UserService, private alertService: AlertService) {

  }

  ngOnInit() {
    this.registerForm = this.fb.group({
      username: ['', Validators.required],
      //gender: ['', Validators.required],
      birth: ['', Validators.required],
      email: ['', [Validators.required, Validators.email]],
      password: ['', [Validators.required, Validators.minLength(8)]]
    });

    this.user = new Object();

  }

  click(ev) {
    console.log(ev.target.defaultValue);
  }

  // convenience getter for easy access to form fields
  get f() {return this.registerForm.controls;}

  onSubmit() {
    this.submitted = true;

    // stop here if form is invalid
    if (this.registerForm.invalid) {
      window.alert("Informations invalides");
      return;
    }

    this.loading = true;
    this.userService.register(this.registerForm.value)
      .pipe(first())
      .subscribe(
      data => {
        this.alertService.success('Registration successful', true);
        this.router.navigate(['/login']);
      },
      error => {
        this.alertService.error(error);
        this.loading = false;
      });
  }

}