You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Angular:如何通过表单外部按钮触发表单验证并显示错误信息

如何通过外部按钮触发MDB表单的HTML5验证提示?

当然可以触发!你只需要手动调用表单的原生验证方法,同时结合Angular和MDB的表单状态处理,就能实现和表单提交时完全一致的验证提示效果。以下是具体的实现步骤:


步骤1:给表单添加模板引用变量

首先在你的表单标签上添加一个模板引用变量(比如#catalogForm),并绑定ngForm指令(因为你用的是模板驱动表单+ngModel):

<form #catalogForm="ngForm" class="custom-form p-2">
  <!-- 原表单内容保持不变 -->
</form>

步骤2:在组件类中获取表单引用

component.ts中导入ViewChildNgForm,并通过模板引用变量获取表单实例:

import { Component, ViewChild, NgForm } from '@angular/core';
// 其他导入保持不变

@Component({
  // 组件元数据保持不变
})
export class YourComponentName {
  @ViewChild('catalogForm') catalogForm!: NgForm;

  // 其他属性和方法保持不变

  create() {
    // 接下来修改这个方法
  }
}

步骤3:修改create()方法手动触发验证

需要做两件事:触发原生HTML5的验证提示,以及更新MDB表单控件的触摸状态来显示自定义错误文本。修改后的create()方法如下:

create() {
  // 1. 触发原生HTML5验证,弹出浏览器默认的必填提示框
  const nativeFormElement = this.catalogForm.nativeElement;
  nativeFormElement.checkValidity();

  // 2. 标记所有表单控件为"已触摸",触发MDB的错误样式和自定义错误提示
  this.catalogForm.control.markAllAsTouched();

  // 验证通过后再调用API
  if (this.catalogForm.valid) {
    this.dataService.create(this.dataService.catalog).subscribe(value => {
      console.log(value);
    }, error => {
      console.log(error);
    });
  }
}

为什么这样有效?

  • checkValidity()是原生HTML表单元素的方法,会遍历所有必填控件,当存在未填的必填项时,会触发浏览器默认的验证提示(和你点击原生提交按钮时的效果一致)。
  • markAllAsTouched()是Angular表单的方法,会把所有控件的状态设为touched,而MDB的mdbInputDirective正是基于这个状态来显示data-error中的自定义错误文本和红色边框样式的。

这样修改后,点击外部的"Create Catalog"按钮时,就会和提交表单时一样,先触发验证提示,只有所有必填项都正确填写后,才会调用API提交数据。

内容的提问来源于stack exchange,提问作者Ricky

火山引擎 最新活动