角表单生成器vs表单控件和表单组

Yul*_*ale 6 angular angular-formbuilder

与表单生成器相比,使用表单控件和表单组有什么优势吗?

我在这里看到的是:

FormBuilder提供了语法糖,可以缩短FormControl,FormGroup或FormArray的创建实例。它减少了构建复杂表格所需的样板数量。

我想知道不使用表单生成器是否有任何优势。我之所以这样问是因为我正在经历一些角度代码,并且看到正在使用表单控件和表单组,并且我想知道如果有更短的方法可以做到这一点,为什么会这样做呢?

那么,相对于其他方式,它有什么优势吗?还是仅仅是偏爱?

小智 25

这个例子在这里

使用 FormGroup:

export class ProfileEditorComponent {
  profileForm = new FormGroup({
    firstName: new FormControl(''),
    lastName: new FormControl(''),
    address: new FormGroup({
      street: new FormControl(''),
      city: new FormControl(''),
      state: new FormControl(''),
      zip: new FormControl('')
    })
  });
}
Run Code Online (Sandbox Code Playgroud)

使用 FormBuilder:

export class ProfileEditorComponent {
  constructor(private fb: FormBuilder) { }

  profileForm = this.fb.group({
    firstName: [''],
    lastName: [''],
    address: this.fb.group({
      street: [''],
      city: [''],
      state: [''],
      zip: ['']
    }),
  });
}
Run Code Online (Sandbox Code Playgroud)


Yul*_*ale 9

我查看了Angular官方文档,并在“ 反应式表单”部分中看到:

FormBuilder服务是随反应式表单模块一起提供的可注入提供程序。

如果您了解更多,您会发现表单构建器是一项与表单组,表单控件和表单数组功能相同的服务。官方文档将其描述为:

手动创建表单控件实例在处理多个表单时可能会重复。FormBuilder服务提供了用于生成控件的便捷方法。

因此基本上可以说FormBuilder是一项旨在帮助我们减少样板代码的服务。此处提供了有关如何使用FormBuilder减少样板代码的示例。要回答这个问题:

那么,相对于其他方式,它有什么优势吗?还是仅仅是偏爱?

嗯,这没有技术优势,无论您使用哪种代码,都取决于您的偏好。

  • 一个缺点是,当您实际上没有动态表单字段并且在模板内使用“formControlName =“myField”`或“formGroup.controls.myFeild”时,IDE将不允许IDE预先检测到与表单相比的任何问题组件上的控件并使用 `[formControl]="myFieldCtrl"` 。 (4认同)

Vol*_*hat 7

它几乎相同。我总是尝试使用表单构建器,因为它更灵活,特别是当我们谈论动态表单创建时。如果您有动态表单创建,您只需将其路径为一个对象,它就会返回您 FormGroup。

  • @Chrillewoodz 是很久以前的事了,但我想我的意思是表单生成器的语法更小,例如 this.fb.group({firstName: ['']}); vs new FormGroup({firstName: new FormControl('')),但现在我不确定:)所以将编辑我的回复:) (2认同)