【问题标题】:Angular reactive form validate required status in child control角度反应形式验证子控件中的所需状态
【发布时间】:2021-08-30 13:45:19
【问题描述】:

我有一个实现ControlValueAccessorValidator 的自定义组件。该组件用于form,我在自定义控件上设置了formControlName,当它在 HTML 中创建时。

所有这些都很好,但缺少的部分是让孩子的input 控件知道它应该是必需的。当必需组件中没有值时,我正在使用引导程序使字段显示为红色,但此子组件不会触发该错误。

我需要从validate 方法返回什么来发出错误信号?我将以下内容作为验证的开始,它确实看到该字段是必需的,并且它没有值,但我不确定失败时应该返回什么。

validate(c: FormControl): ValidationErrors | null {
    if (c.value)
        return c.value instanceof WorkerDTO ? null : {isWorkerObject: false}

    const validator = c.validator?.({} as AbstractControl)
    return validator && validator.required ? {hasValue: false} : null
}

【问题讨论】:

    标签: angular angular-validation controlvalueaccessor angular12


    【解决方案1】:

    你可以返回这样的东西

    validate(c: FormControl): ValidationErrors | null {
        const validator = c.validator?.({} as AbstractControl)
        if (validator && validator.required) {
            if (c.value === undefined || c.value === null) 
                return {c: true}
    

    来自角度文档

    验证错误对象通常有一个属性,其名称是验证键 .... ,其值是您可以插入到错误消息中的任意值字典,

    编辑。

    我的答案显示将字段返回为无效。那么如果你想在视图中显示显式错误,一种方法是使用验证器的名称在 html 中获取错误

    例如来自angular doc:

    <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">//this is a custom validator
        Name cannot be Bob.
      </div>
    

    【讨论】:

    • 这表示控件无效,是的,但它没有明确说明缺少所需的值,因此引导程序中的 CSS 不会将控件着色为红色。
    • 你必须为你的目的做更多的验证器。例如,1 个验证器用于长度,1 个验证器用于正则表达式模式。那么您必须使用验证器的名称获取 html,例如 &lt;div *ngIf="name.errors?.minlength"&gt; Name must be at least 4 characters long. &lt;/div&gt; &lt;div *ngIf="name.errors?.regexPattern"&gt; Name must have only valid character &lt;/div&gt;
    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多