ng14 中具有强类型表单的 FormBuilder
FormBuilder with strongly typed form in ng14
我有以下表格:
const enum Fields {
FirstName = 'firstName',
LastName = 'lastName'
}
interface FormType {
[Fields.FirstName]: FormControl<string | null>;
[Fields.LastName]: FormControl<string | null>;
}
public form!: FormGroup<FormType>;
this.form = new FormGroup({
[Fields.FirstName]: new FormControl(null, { validators: Validators.required }),
[Fields.LastName]: new FormControl(null, { validators: Validators.required }),
});
使用enum
是我为了避免打错而养成的习惯。
当我执行 this.form.getRawValue().firstName
时,firstName
的类型被正确定义为 string | null
。但是,我更喜欢使用 FormBuilder
来构建我的表单,但是我找不到使用 FormBuilder
来翻译上面的表单的方法。我试过这个:
this.form = this._fb.group<FormType>({
[Fields.FirstName]: ['', Validators.required],
[Fields.LastName]: ['', Validators.required],
});
我当然可以使用一个没有任何类型的简单 FormGroup
但它会破坏目的 :p
然而,这甚至不能用作 string | Validators
的推断类型。我尝试了不同的方法但没有成功。
是否可以将 FormBuilder 与强类型表单一起使用?
对于 Formbuilder,您可以提供原始值、控件或装箱值,系统会自动推断类型。
this.form = this._fb.group({
[Fields.FirstName]: ['', Validators.required],
[Fields.LastName]: ['', Validators.required],
});
this.form.value //value: Partial<{firstName: string | null;lastName: string | null;}>
我有以下表格:
const enum Fields {
FirstName = 'firstName',
LastName = 'lastName'
}
interface FormType {
[Fields.FirstName]: FormControl<string | null>;
[Fields.LastName]: FormControl<string | null>;
}
public form!: FormGroup<FormType>;
this.form = new FormGroup({
[Fields.FirstName]: new FormControl(null, { validators: Validators.required }),
[Fields.LastName]: new FormControl(null, { validators: Validators.required }),
});
使用enum
是我为了避免打错而养成的习惯。
当我执行 this.form.getRawValue().firstName
时,firstName
的类型被正确定义为 string | null
。但是,我更喜欢使用 FormBuilder
来构建我的表单,但是我找不到使用 FormBuilder
来翻译上面的表单的方法。我试过这个:
this.form = this._fb.group<FormType>({
[Fields.FirstName]: ['', Validators.required],
[Fields.LastName]: ['', Validators.required],
});
我当然可以使用一个没有任何类型的简单 FormGroup
但它会破坏目的 :p
然而,这甚至不能用作 string | Validators
的推断类型。我尝试了不同的方法但没有成功。
是否可以将 FormBuilder 与强类型表单一起使用?
对于 Formbuilder,您可以提供原始值、控件或装箱值,系统会自动推断类型。
this.form = this._fb.group({
[Fields.FirstName]: ['', Validators.required],
[Fields.LastName]: ['', Validators.required],
});
this.form.value //value: Partial<{firstName: string | null;lastName: string | null;}>