• angular表单


    angular表单和bootstrap表单比较:

    以前对bootstrap表单比较熟悉,今天解锁了新技能:angular表单

    首先,提交方式基本一致,都是表单控件的value值

    angular:

    <formform (ngSubmit)="onSubmit(form.value)" #form="ngForm"></form>

    bootstrap:

    <form class="form-horizontal " action="~/GetInfo/tijiao" role="form" id="ajaxform"></form>

    angular注册:

    import { Component } from '@angular/core';
    import { FormGroup, FormControl } from '@angular/forms';
    
    @Component({
      selector: 'app-profile-editor',
      templateUrl: './profile-editor.component.html',
      styleUrls: ['./profile-editor.component.css']
    })
    export class ProfileEditorComponent {
      profileForm = new FormGroup({
        firstName: new FormControl(''),
        lastName: new FormControl(''),
      });
    }
    

      

    现在,这些独立的表单控件被收集到了一个控件组中。这个 FormGroup 用对象的形式提供了它的模型值,这个值来自组中每个控件的值。 FormGroup 实例拥有和 FormControl 实例相同的属性(比如 valueuntouched)和方法(比如 setValue())。

    把这个 FormGroup 模型关联到视图。

    这个表单组还能跟踪其中每个控件的状态及其变化,所以如果其中的某个控件的状态或值变化了,父控件也会发出一次新的状态变更或值变更事件。该控件组的模型来自它的所有成员。在定义了这个模型之后,你必须更新模板,来把该模型反映到视图中。

    <form [formGroup]="profileForm">
      
      <label>
        First Name:
        <input type="text" formControlName="firstName">
      </label>
    
      <label>
        Last Name:
        <input type="text" formControlName="lastName">
      </label>
    
    </form>
    

      表单验证:

    这里有两种表单验证方式,首先第一种是官方教程的验证:

    <input id="name" name="name" class="form-control"
          required minlength="4" appForbiddenName="bob"
          [(ngModel)]="hero.name" #name="ngModel" >
    
    <div *ngIf="name.invalid && (name.dirty || name.touched)"
        class="alert alert-danger">
    
      <div *ngIf="name.errors.required">
        Name is required.
      </div>
      <div *ngIf="name.errors.minlength">
        Name must be at least 4 characters long.
      </div>
      <div *ngIf="name.errors.forbiddenName">
        Name cannot be Bob.
      </div>
    
    </div>
    

      

    在这个例子中,name 控件设置了两个内置验证器 - Validators.required 和 Validators.minLength(4) 以及一个自定义验证器 forbiddenNameValidator

    所有这些验证器都是同步的,所以它们作为第二个参数传递。注意,你可以通过把这些函数放到一个数组中传入来支持多个验证器。

    这个例子还添加了一些 getter 方法。在响应式表单中,你通常会通过它所属的控件组(FormGroup)的 get 方法来访问表单控件,但有时候为模板定义一些 getter 作为简短形式。

    如果你到模板中找到 name 输入框,就会发现它和模板驱动的例子很相似。

    自定义验证器:

    export function forbiddenNameValidator(nameRe: RegExp): ValidatorFn {
      return (control: AbstractControl): {[key: string]: any} | null => {
        const forbidden = nameRe.test(control.value);
        return forbidden ? {'forbiddenName': {value: control.value}} : null;
      };
    }
    

      

    把自定义验证器添加到响应式表单中:

    this.heroForm = new FormGroup({
      'name': new FormControl(this.hero.name, [
        Validators.required,
        Validators.minLength(4),
        forbiddenNameValidator(/bob/i) // <-- Here's how you pass in the custom validator.
      ]),
      'alterEgo': new FormControl(this.hero.alterEgo),
      'power': new FormControl(this.hero.power, Validators.required)
    });
    

      另一种方式:

    ceshi=new FormControl('', [Validators.required,Validators.minLength(5)])
      getErrorMessage() {
        //console.log(this.ceshi)
        if(this.ceshi.errors.minlength){console.log("000")}
        return this.ceshi.hasError('required') ? 'You must enter a value' :
                '';
      }
    

      获取所有警告信息,如果没有可以执行提交

    <form #form2="ngForm" name="myform">
            <span>建筑类型:</span>
            <mat-form-field style="margin-left: 10px;">
              <mat-select  name='chaxun' [(ngModel)]="chaxun">
                <mat-option  *ngFor="let item of this.echartsData.buildingType" [value]="item.name">{{item.name}}</mat-option>
              </mat-select>
            </mat-form-field>
            
            <input   id="name" name="username" ng-minlength="5" [formControl]="ceshi">
          <span *ngIf="ceshi.invalid">{{getErrorMessage()}}</span>
          <!-- <span *ngIf="ceshi.errors.minlength">5</span> -->
            <button type="submit" mat-raised-button color="primary" (click)="findClick()">查询</button>
          </form>
    

      页面显示警告信息

  • 相关阅读:
    Java 8简明教程
    Redis事务机制和分布式锁
    【 Tomcat 】tomcat8.0 基本参数调优配置-----(2)
    【 Tomcat 】tomcat8.0 基本参数调优配置-----(1)
    Nginx的一理解(2)
    Nginx的一理解(1)
    jav设计模之的动态代理
    Java设计模式之《适配器模式》及应用场景
    Java设计模式之三种工厂模式
    pytorch高阶op
  • 原文地址:https://www.cnblogs.com/jingyukeng/p/13995251.html
Copyright © 2020-2023  润新知