首页 文章

角度反应表单验证

提问于
浏览
0

我有一个有 3 个输入的表格,需要 2 个输入,第三个不是。

我的问题是,当我去表单的页面时,我看到不需要的字段处于有效状态并且已经用绿色着色,即使字段没有脏或触摸。

在我验证字段/表单之前,还有什么方法可以使输入变灰,或者它是否像设计一样?

这是我在组件中使用的代码:

export class SystemSettingsComponent implements OnInit {
form: FormGroup;

constructor(private formBuilder: FormBuilder) {
    this.form = new FormGroup({});
}

ngOnInit() {
    this.form = this.formBuilder.group({
        serviceName: ['', Validators.required],
        serviceDesc: [''],
        serviceId: [{value: SystemSettingsComponent.generateId(), disabled: true}, Validators.required]
    });
}

static generateId() {
    return Math.random().toString(36).substr(2, 9);
}}

和模板:

<form [formGroup]="form" novalidate>
<div class="row">
    <div class="col-lg-4">
        <mat-form-field>
            <input matInput placeholder="שם השירות" formControlName="serviceName"/>
        </mat-form-field>
        <mat-form-field>
            <textarea matInput placeholder="תיאור השירות" formControlName="serviceDesc"></textarea>
        </mat-form-field>
        <mat-form-field>
            <input matInput class="ltr text-align-left" placeholder="מזהה שירות" formControlName="serviceId"/>
        </mat-form-field>
    </div>
</div>
<div>
    <button mat-raised-button class="mat-raised-button mat-primary" matStepperNext>הבא</button>
</div>

1 回答

  • 0

    您可以监听表单的状态更改,并相应地设置可选的表单控件的禁用状态。就像是:

    ngOnInit() {
        this.form = this.formBuilder.group({
            serviceName: ['', Validators.required],
            serviceDesc: [{value: '', disabled: true}],
            serviceId: [{value: SystemSettingsComponent.generateId(), disabled: true}, Validators.required]
        });
    
        this.form.statusChanges.subscribe(status => {
            if (status === 'VALID' && this.form.controls.serviceDesc.disabled) {
                this.form.controls.serviceDesc.enable();
            } else if (status !== 'VALID' && this.form.controls.serviceDesc.enabled) {
                this.form.controls.serviceDesc.disable();
            }
        });
    }
    

相关问题