• Angular 使用总结(六)表单之快速生成


    快速生成一个表单,需求如下:

    收集以下信息:

    姓名,字符串,必填

    地址,字符串,选填

    兴趣,字符串,选填

    问题,对象,必填

    电话,数组,选填

    示例数据:

      data = {
        name: 'zhangming',
        address: 'China Xian',
        hobby: 'Sing',
        questions: {
          question1: "What's your pet?",
          answer1: 'dog',
          question2: 'Where do you want to go?',
          answer2: 'England'
        },
        tels: ['13282928282','123272837282']
      }
    需求,如果有数据能快速load到页面,同时页面也给用户编辑,之后能快速取出数据
     
     1. 引用模块

     2. 定义表单对象

     属性名与数据源的属性名最好一一对应,这样好取数据

    3.编写HTML

    <form [formGroup]="form" (ngSubmit)="onSubmit()" class="form">
        <label>
            Name:
            <input formControlName="name" required>
        </label>
        <label>
            Address:
            <input formControlName="address" [style.width.px]="300">
        </label>
        <label>
            Hobby:
            <input formControlName="hobby">
        </label>
        <div formGroupName="questions">
            <label>
                Qusetion1:
                <input formControlName="question1" required>
            </label>
            <label>
                Answer1:
                <input formControlName="answer1" required>
            </label>
            <label>
                Qusetion2:
                <input formControlName="question2" required>
            </label>
            <label>
                Answer2:
                <input formControlName="answer2" required>
            </label>
        </div>
        <div formArrayName="tels">
            Telphone
            <button (click)="addTel()">+</button>
    
            <label *ngFor="let tel of telList.controls;let i = index">
                <input [formControlName]="i">
            </label>
        </div>
    
        <button (click)="onSubmit()" [disabled]="!form.valid" [style.margin-top.px]="50">submit</button>
    </form>

    注意几个点:

    使用:

    1. 数据到UI

    2. 从UI取数据

     

     运行效果:

    简单的数据验证:

    1. 使用 Angular 内置的一些校验和 一个自定义校验逻辑

    自定义的校验:

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

    使用校验,这里对一个控件加了三个校验,前两个是内置,最后一个自定义

    ts:

      form = this.fb.group({
        name: ['', [Validators.required, Validators.minLength(4), forbiddenNameValidator(/^d{4}$/)]],
        address: [''],
        hobby: [''],
        questions: this.fb.group({
          question1: ['', Validators.required],
          answer1: ['', Validators.required],
          question2: ['', Validators.required],
          answer2: ['', Validators.required]
        }),
        tels: this.fb.array([this.fb.control('')])
      });

     暴露name这个form control,这样就能在html里引用错误

    加之前:

        <label>
            Name:
            <input formControlName="name" required>
        </label>

    加之后:

        <label>
            Name:
            <input formControlName="name" required>
            <ng-container *ngIf="name.invalid && (name.touched || name.dirty)" >
                <div *ngIf="name.errors.required" class="error">
                    Name is required.
                </div>
                <div *ngIf="name.errors.minlength" class="error">
                    Name must be at least 4 characters long.
                </div>
                <div *ngIf="name.errors.forbiddenValue" class="error">
                    Name can not be four number.
                </div>
            </ng-container>
        </label>

    效果:

    刚运行起来,不操作,不显示消息:

     点击之后:

     输入几个字符:

     输入不符合正则表达式:

     css:

    .error {
        color: #a94442;
    }
  • 相关阅读:
    java web项目打包.war格式
    version 1.4.2-04 of the jvm is not suitable for thi
    Sugarcrm Email Integration
    sharepoint 2010 masterpage中必须的Content PlaceHolder
    微信开放平台
    Plan for caching and performance in SharePoint Server 2013
    使用自定义任务审批字段创建 SharePoint 顺序工作流
    Technical diagrams for SharePoint 2013
    To get TaskID's Integer ID value from the GUID in SharePoint workflow
    how to get sharepoint lookup value
  • 原文地址:https://www.cnblogs.com/chenyingzuo/p/12555204.html
Copyright © 2020-2023  润新知