Angular 7:使用 Reactive Forms 构建表单

阅读时长 8 分钟读完

在 Angular 应用开发中,表单是一个很重要的部分。为了方便表单的管理和校验,Angular 提供了两种表单风格:模板驱动表单(Template-driven Forms)和响应式表单(Reactive Forms)。相比于模板驱动表单,响应式表单对于表单的复杂性和可维护性更加友好,也更推荐使用。

本篇文章将详细介绍如何使用 Angular 7 中的响应式表单构建表单,同时提供示例代码,帮助读者更好地理解和学习。

Reactive Forms 介绍

响应式表单是 Angular 中的一个特性。使用响应式表单时,表单的所有状态都可以通过一个可观察对象(Observable)来表示,这个可观察对象可以监听表单的状态并响应表单变化。因此,它对表单的交互、校验和提交有很大的灵活性和可定制性。响应式表单提供了 FormBuilder 和 FormGroup 来帮助开发者创建表单以及管理表单状态。

Form Builder 和 Form Group

在响应式表单中,FormBuilder 是用来构建表单的工具,而 FormGroup 是用来管理表单状态的对象。下面是创建一个表单并使用 FormGroup 来管理表单状态的示例代码:

-- -------------------- ---- -------
------ - ---------- ------ - ---- ----------------
------ - ------------ ---------- ---------- - ---- -----------------

------------
  --------- ----------------
  ------------ -----------------------------
  ---------- -----------------------------
--
------ ----- ----------------- ---------- ------ -

  --------- ----------

  ------------------- --- ------------ - -

  ---------- -
    ------------- - ---------------
      ----- ---- --------------------- --------------------------
      ------ ---- --------------------- -------------------
      --------- ---- --------------------- --------------------------
      ---------------- ---- ---------------------
    -- - ---------- --------------------------- ---
  -

  ---------- -
    ---------------------------------
  -

  -------------------------- ----------- - ----- -------- ------- - -
    ------ ------------------------ --- ------------------------------- - ---- - - ------------------- ---- --
  -

-

在上面的代码中,userForm 是一个 FormGroup 实例,它管理着表单的所有状态。FormBuilder 用来构建表单,并且可以设置表单状态的默认值、校验器、异步校验器等。在构建表单时还可以使用 Validators 来设置表单项的校验器。

同时,我们还可以自定义校验器来校验两个输入框的值是否相等。自定义校验器需要接收一个 FormGroup 参数,并在内部编写校验逻辑。在上面的示例代码中,我们编写了一个 passwordMatchValidator 函数,用来校验两个输入框的值是否相等。如果校验通过则返回 null,否则返回一个 passwordMismatch 属性表示校验不通过。

在表单提交后,我们可以通过 userForm.value 来获取表单的数据并进行提交操作。

表单控件

在响应式表单中,表单控件也是很重要的一部分。表单控件可以是输入框、下拉框、单选框、复选框等常见的表单元素。使用 Angular 中的响应式表单时,我们可以通过 FormBuilder 来创建表单控件,并设置它们的默认值、校验器等。

下面是一个简单的示例,展示如何创建一个输入框的表单控件:

-- -------------------- ---- -------
------ - ---------- ------ - ---- ----------------
------ - ------------ ---------- ---------- - ---- -----------------

------------
  --------- ----------------
  ------------ -----------------------------
  ---------- -----------------------------
--
------ ----- ----------------- ---------- ------ -

  --------- ----------

  ------------------- --- ------------ - -

  ---------- -
    ------------- - ---------------
      ----- ---- --------------------- --------------------------
      ------ ---- --------------------- -------------------
      --------- ---- --------------------- --------------------------
      ---------------- ---- ---------------------
    ---
  -

  ---------- -
    ---------------------------------
  -

-

在上面的代码中,我们使用 FormBuilder 创建了 4 个表单控件,它们分别是 nameemailpasswordconfirmPassword。在表单中,我们需要设置每个控件的 formControlName 属性,以便表单和表单控件建立联系。

下面是在模板中创建表单时,如何使用表单控件的示例代码:

-- -------------------- ---- -------
----- ---------------------- ------------------------
  -----
    ------ ------------------------
    ------ ----------- --------- -----------------------
    ----- ----------------------------------------- -- -------- --- ---- -- -- ----- - ---------- -----------
  ------
  -----
    ------ --------------------------
    ------ ------------ ---------- ------------------------
    ----- --------------------------------------------- ------------
  ------
  -----
    ------ --------------------------------
    ------ --------------- ------------- ---------------------------
    ----- ------------------------------------------------- -- -------- --- ---- -- -- ----- - ---------- -----------
  ------
  -----
    ------ ----------------------------- -----------------
    ------ --------------- -------------------- ----------------------------------
    ----- ------------------------------------------------------- -- --- ------------
  ------
  ------- ------------- ---------------------------------------------
-------

在模板中,我们使用 formControlName 属性把表单控件和表单关联起来。同时,我们也设置了一些校验规则和错误提示信息,使得用户可以更好地进行表单填写和校验。

总结

本篇文章介绍了 Angular 7 中如何使用响应式表单来构建复杂的表单。我们通过使用 FormBuilderFormGroup 来创建表单和管理表单状态,并介绍了如何设置表单控件的默认值、校验器和错误提示。同时,我们还提供了示例代码来帮助读者更好地理解和学习。

响应式表单在 Angular 应用开发中是一个非常实用的特性,它可以提高表单的灵活性和可定制性,帮助开发者更好地管理表单。如果你正在开发 Angular 应用,响应式表单是一个值得学习和掌握的技能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64941d5148841e98941a4367

纠错
反馈