【问题标题】:Angular - How to Trigger mat-error automaticallyAngular - 如何自动触发 mat-error
【发布时间】:2021-10-08 19:14:37
【问题描述】:

我有一个表格,动态填写 init(使用数据库数据)。

我添加了一个模式检查(使用一些 REGEX)。如果模式不好,则会显示mat-error。如果我专注于输入然后再专注于输入,它就会起作用。

但是如果我使用 FormControl 中的setValue() 函数,mat-error 不会自动显示。

这是 mat-error 定义:

<input [id]="field.id" matInput type="text" [formControl]="field.control" [pattern]="field.pattern">
<mat-error class="mt-1" *ngIf="field.control.errors">
    {{ getErrorMessage(field.id, category['id']) }}
</mat-error>

以及我自动设置值的方式

async fillForm(data: any): Promise<any> {
    this.fields = data.fields;
    for (let category in this.fields) {
        for (let cpt in this.fields[category]) {
            let field = this.fields[category][cpt];
            this.form[category].push({
                id: field.id,
                label: field.label,
                required: field.required,
                control: new FormControl(),
                type: field.type,
                pattern: this.getPattern(field.format),
                color: field.color,
                unit: field.unit,
                class: field.class,
                format: field.format,
                display: field.display,
                format_icon: field.format_icon,
                display_icon: field.display_icon,
                class_label: field.class_label,
                cpt: 0,
            });

            let value = this.invoice.datas[field.id];
            let _field = this.form[category][this.form[category].length - 1];
            _field.control.setValue(value);
        }
    }
}

感谢您的帮助

【问题讨论】:

    标签: angular form-control


    【解决方案1】:

    让我们试试这个方法:

    <input [id]="field.id" matInput type="text" [formControl]="field.control">
    <mat-error class="mt-1" *ngIf="field.control.errors">
        {{ getErrorMessage(field.id, category['id']) }}
    </mat-error>
    
    async fillForm(data: any): Promise<any> {
        this.fields = data.fields;
        for (let category in this.fields) {
            for (let cpt in this.fields[category]) {
                let field = this.fields[category][cpt];
                let value = this.invoice.datas[field.id];
                this.form[category].push({
                    id: field.id,
                    label: field.label,
                    required: field.required,
                    control: new FormControl(value, [Validators.pattern(this.getPattern(field.format))]),
                    type: field.type,
                    pattern: this.getPattern(field.format),
                    color: field.color,
                    unit: field.unit,
                    class: field.class,
                    format: field.format,
                    display: field.display,
                    format_icon: field.format_icon,
                    display_icon: field.display_icon,
                    class_label: field.class_label,
                    cpt: 0,
                });
            }
        }
    }
    

    【讨论】:

    • 嗨,我试了一下,就在 setValue 之后,但它不起作用.. mat-error 没有显示:/
    • 意外(:我添加了另一个版本。我不确定,让我们试试吧。顺便说一句,100% 确定模式是正确的吗?
    • 我终于找到了解决我的问题的方法。而不是updateValueAndValidity 我使用markAsTouched() :)。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2019-09-19
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2018-07-08
    相关资源
    最近更新 更多