Angular 角形自定义验证器

Angular 角形自定义验证器,angular,angular-forms,angular-validation,Angular,Angular Forms,Angular Validation,我目前使用的是Angular 8,我对自定义验证器有一个问题。唯一有效的验证器是Validators.minLength(3)noEmptyStringValidator不工作,即使我可以将“here”打印到validator函数中。你能帮我吗 背景如下: 没有空字符串.validator.ts import { AbstractControl } from '@angular/forms'; export function noEmptyStringValidator(control: Ab

我目前使用的是Angular 8,我对自定义验证器有一个问题。唯一有效的验证器是Validators.minLength(3)noEmptyStringValidator不工作,即使我可以将“here”打印到validator函数中。你能帮我吗

背景如下:

没有空字符串.validator.ts

import { AbstractControl } from '@angular/forms';

export function noEmptyStringValidator(control: AbstractControl): { [key: string]: any } | null {
    console.log('here');

    return control.value && control.value.trim().length > 0 ? { noEmptyString: { valid: true } } : null;
}
...
topicLabelControl = new FormControl();
...
this.topicLabelControl.setValidators([ Validators.minLength(3), noEmptyStringValidator ]);
...
console.log(this.topicLabelControl.valid);
myComponent.component.ts

import { AbstractControl } from '@angular/forms';

export function noEmptyStringValidator(control: AbstractControl): { [key: string]: any } | null {
    console.log('here');

    return control.value && control.value.trim().length > 0 ? { noEmptyString: { valid: true } } : null;
}
...
topicLabelControl = new FormControl();
...
this.topicLabelControl.setValidators([ Validators.minLength(3), noEmptyStringValidator ]);
...
console.log(this.topicLabelControl.valid);
myComponent.component.html

<mat-form-field appearance="outline"
      (keydown.enter)="handleEnterKey()">
      <input type="text"
        matInput
        [formControl]="topicLabelControl"
        [matAutocomplete]="auto" />
      <mat-autocomplete #auto="matAutocomplete">...
      </mat-autocomplete>
    </mat-form-field>

...

您的逻辑似乎颠倒了:如果输入有效,验证器应返回
null
,如果无效,则返回一个对象,该对象的键标识错误。(该值可以是任何值,并可用于报告任何其他信息):

return control.value&&control.value.trim().length>0?null:{noEmptyString:true};

您的逻辑似乎颠倒了:如果输入有效,验证器应返回
null
,如果无效,则返回一个对象,该对象的键标识错误。(该值可以是任何值,并可用于报告任何其他信息):

return control.value&&control.value.trim().length>0?null:{noEmptyString:true};