如何为 formControl 添加元数据?

How to add meta data for formControl?

我有表格数组 FormGroup;

let forms = [this.form1, this.form2];

每个表单都有几个控件:FormControl

如何向 FormControl 添加其他数据,例如元素类型(输入、文本区域、select)?

例如我有表格:

export class ProfileEditorComponent {
  profileForm = this.fb.group({
    firstName: [''],
    lastName: [''],
    address: this.fb.group({
      street: [''],
      city: [''],
      state: [''],
      zip: ['']
    }),
  });

我怎么知道 zip 字段下应该是 input 还是 select

如何在具有嵌套形式的模板中迭代 profileForm

问题编辑前回答

更新

以下称为模块扩充here or enter link description here

这允许扩充(例如添加方法 pr 属性)来自第三方模块的 classes

原版

我们有一个警告验证器的要求,angular 没有提供。 我们所做的是 typings.d.ts 文件中的以下内容,该文件必须驻留在我们的应用程序根目录中。

declare module '@angular/forms' {

  export interface AbstractControl {
    warnings: ValidationErrors | null;
  }
}

ValidationErrors 是我们的习俗 class。

你可以这样做

declare module '@angular/forms' {

  export interface AbstractControl {
    elementType: string; // input, textarea, select
  }
}

有了它,您应用程序中的所有 AbstractControls 都可以使用 属性 elementType

您也可以使用 FormControl 而不是 AbstractControl

有一个提出此功能的未解决问题:https://github.com/angular/angular/issues/19686

现在,您可以应用一个不太“漂亮”的解决方案。您可以在 FormGroup 中转换 FormControl,并使用元数据创建 FormControlFormGroup

this.fb.group({
  firstName: this.fb.group({
    value: [''],
    _metadata: this.fb.group({
      type: ['input'], // type of element
    })
  })
)}