gpt4 book ai didi

即使未验证表单,组件加载时 react 表单的 Angular 7 设置值也会启用保存按钮

转载 作者:太空狗 更新时间:2023-10-29 17:46:01 25 4
gpt4 key购买 nike

我有以下问题。 Click to check the stack blitz .

我在构造函数中设置一个响应式表单:

this.formGroup = this.fb.group({
'family_name_en': new FormControl('', Validators.required),
'family_name_ar': new FormControl('', [Validators.required, Validators.pattern('[\u0600-\u06FF ]*')]),
'unit_id': new FormControl({ value: '', disabled: true }, [Validators.required])
});

ngOnInti() Hook 中,我正在获取与 unit_id 相关的数据。

由于我正在将数据从一个平台迁移到另一个平台,因此不推荐使用阿拉伯语的姓氏,但现在推荐使用。因此大部分数据将在没有阿拉伯名称的情况下加载。

问题是按钮始终处于启用状态,我需要做的是,如果用户想要更新此 unit_id,他应该添加阿拉伯文名称,以便按钮启用。

如果表单有效,则在加载组件时启用按钮没有坏处。

这是获取数据并设置表单组控件值的 getData() 方法:

ngOnInit() {
this.getDataById();
}

getDataById():

getDataById() {
this.showSpinner = true;
this.auth.getDataById(this.unit_id).subscribe(
(data) => {
if (data['info'][0]['total'] == 1) {
this.noDataBool = false;
this.showSpinner = false;
this.family_name_en = data['info'][0]['hh_last_name_en'];
this.formGroup.controls['family_name_en'].setValue(this.family_name_en);
this.family_name_ar = data['info'][0]['hh_last_name_ar'];
this.formGroup.controls['family_name_ar'].setValue(this.family_name_ar);
this.unit_id = data['info'][0]['unit_id'];
this.formGroup.controls['unit_id '].setValue(this.unit_id);
}
}

按钮:

<button mat-raised-button color="warn" (click)="updateData()" [disabled]="!formGroup.valid">
<mat-icon>update</mat-icon>Update
</button>

最佳答案

与其使用 formGroup 上的 controls 直接访问 FormControl,不如使用 get API 在他们身上。这会给你更多的控制权并显着清理你的实现(特别是在获得深层嵌套元素的情况下)。您可以像这样更改组件实现:

import { Component } from '@angular/core';
import { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';
import { Observable } from 'rxjs/Observable';

@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {

formGroup: FormGroup;
titleAlert: string = 'This field is required';
post: any = '';
family_name_en;
family_name_ar;
unit_id;
constructor(private fb: FormBuilder) { }

ngOnInit() {
this.formGroup = this.fb.group({
'family_name_en': new FormControl('', Validators.required),
'family_name_ar': new FormControl('', [Validators.required, Validators.pattern('[\u0600-\u06FF ]*')]),
'unit_id': new FormControl({ value: '', disabled: true }, [Validators.required])
});
this.getDataById();
}

getDataById() {
let data: Array<any> = [
'Ali', '', '123'
]
this.family_name_en = data[0];
this.formGroup.get('family_name_en').setValue(this.family_name_en);
this.family_name_ar = data[1];
this.formGroup.get('family_name_ar').setValue(this.family_name_ar);
this.unit_id = data[2];
this.formGroup.get('unit_id').setValue(this.unit_id);
}

}

这是一个 Updated StackBlitz供您引用。您可以通过在其中输入 علي 来测试它,这将启用“更新”按钮。输入 Ali 将让它保持禁用状态。

关于即使未验证表单,组件加载时 react 表单的 Angular 7 设置值也会启用保存按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53387798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com