请教一个问题?

来源:10-9 为自定义表单控件增加验证

simple8514650

2024-01-04

视频教程在自定义表单控件验证必填的验证时候,在添加首次一开始添加时候这个校验验证就生效了。怎么修改是在touch这个控件如果没有内容之后这必填的验证生效呢?图片描述

写回答

2回答

接灰的电子产品

2024-01-04

就是一个判断条件啊,判断是否dirty 然后给对应的css 属性

0
2
simple8514650
非常感谢!
2024-01-04
共2条回复

接灰的电子产品

2024-01-04

import { Component, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR, NG_VALIDATORS, Validator, FormControl } from '@angular/forms';

@Component({
  selector: 'app-uppercase-input',
  template: `
    <input type="text" [(ngModel)]="value" (input)="onInput()" (blur)="onBlur()">
  `,
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => UppercaseInputComponent),
      multi: true,
    },
    {
      provide: NG_VALIDATORS,
      useExisting: forwardRef(() => UppercaseInputComponent),
      multi: true,
    },
  ],
})
export class UppercaseInputComponent implements ControlValueAccessor, Validator {
  value: string = '';
  touched: boolean = false;

  propagateChange = (_: any) => {};
  validateFn: any;

  constructor() {
    this.validateFn = this.validate.bind(this);
  }

  // ControlValueAccessor implementation
  writeValue(value: any): void {
    if (value !== undefined) {
      this.value = value;
    }
  }

  registerOnChange(fn: any): void {
    this.propagateChange = fn;
  }

  registerOnTouched(fn: any): void {
    this.touched = false;
  }

  onInput() {
    this.value = this.value.toUpperCase();
    this.propagateChange(this.value);
  }

  onBlur() {
    this.touched = true;
    this.validateFn(null);
  }

  // Validator implementation
  validate(control: FormControl) {
    if (this.touched && !this.value) {
      return { required: true };
    }

    return null; // Validation passed
  }
}

自己参考一下吧


0
0

Angular 开发拼多多webapp 从基础到项目实战

高仿拼多多WebApp,带你在实战环境中学习Angular

1317 学习 · 451 问题

查看课程