如何在 Angular 中管理表单验证?

阅读时长 9 分钟读完

Angular 是现代 Web 前端开发中著名的框架之一,表单验证是 Angular 中重要的特性之一。表单验证是 Web 应用中最常用的部分之一,通过表单验证确保提交的数据是有效的和正确的。在 Angular 中,表单验证实现是简单的,并且提供了内置的指令和管道以验证表单。

在本文中,我们将更深入地了解 Angular 中的表单验证,包括如何使用内置指令设置必填字段、正则表达式、从后端验证表单等。

Angular 表单验证架构

Angular 中的表单验证有两种形式:模板驱动表单和模型驱动表单。

模板驱动表单是通过 Angular 模板管理的表单,包含了 HTML 和指令。在模板驱动表单中,表单验证规则是通过指令来设置的。

而模型驱动表单是使用了 Angular 的 Reactive Forms 模块,这种方式更加灵活并支持更广泛的场景。在 Reactive Forms 中,表单验证规则是由 FormControl 和 FormGroup 控制的,FormGroup 是一个包含一些 FormControl 和 FormGroup 的集合。

无论是哪种形式的表单验证,都可以使用 Angular 内置的 FormGroup 和 FormControl 类或一些自定义类实现验证。

模板驱动表单

模板驱动表单是通过 Angular 模板管理的表单,包含了 HTML 和指令。在模板驱动表单中,表单验证规则是通过指令来设置的。

例如,我们可以添加一个 required 属性到表单控件上,使其成为必填项:

关于模板驱动表单的表单验证更多内容可以参考官方文档。

模型驱动表单

模型驱动表单是通过 Reactive Forms 模块实现的,这种方式更加灵活并支持更广泛的场景。

在 Reactive Forms 中,我们可以使用内置的 Validators 类及其静态方法,设置表单验证规则。例如:

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

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

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

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

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

在上面的例子中,我们创建了一个 FormGroup,包含了若干个 FormControl。我们使用 Validators 静态方法来设置每个 FormControl 的验证规则,然后通过 FormGroup(和自定义验证器)来检验密码和确认密码是否一致。

Angular 中内置的表单验证指令

在 Angular 中,内置了一些指令,用于设置表单验证规则。以下是一些常用的指令:

指令 描述
ngModel 双向绑定控件的值,验证规则可以通过 Validators 设置
email 控件的值必须为电子邮件地址
url 控件的值必须为 URL
required 控件的值必须非空
max 控件的值必须小于或等于指定最大值
min 控件的值必须大于或等于指定最小值
pattern 控件的值必须符合正则表达式
maxLength 控件的值的长度不能超过指定的最大长度
minLength 控件的值的长度不能小于指定的最小长度

Angular 中自定义表单验证指令

有时候内置的验证指令不足以满足需求,我们需要自定义验证指令。在 Angular 中,我们可以使用 @Directive 装饰器来创建自定义指令,并在指令类中使用 Validators 类来设置验证规则。

以下是一个自定义的验证指令,它用来验证输入的值是否为英文字母:

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

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

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

在上述例子中,我们使用了 @Directive 装饰器来创建自定义的验证指令,并在指令类中实现了 Validator 接口。通过实现 Validator 接口,我们必须要实现 validate 方法,它接收一个 FormControl 类型的参数,表示需要验证的表单控件。

在 validate 方法中,我们使用正则表达式来验证表单控件的值是否为英文字母,并根据验证结果返回一个标识符对象 { lettersOnly: true }null

如何从后端验证表单

在一些应用场景下,我们需要将表单数据传送到后端进行验证。使用 Angular 中的 HttpClient 可以很容易地完成这个操作。以下是一个简单的示例代码:

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

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

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

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

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

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

在上面的代码中,我们首先创建了一个表单,包含了 Email 和 Password 两个字段。然后,我们使用 HttpClient.post 方法,将表单数据和路径传送到服务器,根据服务端返回的响应结果,处理表单验证结果。

总结

在 Angular 中,表单验证是非常常见和重要的部分。在本文中,我们介绍了 Angular 中的表单验证架构,即模板驱动表单和模型驱动表单,并分别介绍了它们的验证方式。此外,我们还介绍了 Angular 中内置的验证指令、自定义验证指令和从后端验证表单的方法。希望读者理解了这些知识后,能够在实际开发中更加灵活地使用表单验证功能。

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

纠错
反馈