首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在ReactiveForms中实现多嵌套(by *ngFor) formControl进行验证?

在ReactiveForms中实现多嵌套(by *ngFor) formControl进行验证的过程如下:

  1. 创建表单模型:首先,你需要在组件中创建一个表单模型对象,可以使用FormGroupFormArray来表示嵌套的表单控件结构。FormGroup用于表示一个组的控件集合,FormArray用于表示数组形式的控件集合。
  2. 构建模板:在组件的模板中,使用*ngFor指令来迭代嵌套的控件,为每个迭代项创建一个表单控件。使用formGroupName来指定每个嵌套的FormGroup的名称。
  3. 表单校验:为每个表单控件添加验证规则。你可以使用Validators提供的内置验证器,也可以自定义验证器。将验证规则应用到对应的表单控件上。
  4. 表单提交:在组件中,通过订阅表单的valueChanges事件或使用submit按钮,来处理表单的提交操作。你可以获取表单的值,并进行相应的处理。

以下是一个示例代码,演示了如何在ReactiveForms中实现多嵌套 formControl 进行验证:

代码语言:txt
复制
<form [formGroup]="myForm" (ngSubmit)="submitForm()">
  <div formArrayName="nestedArray">
    <div *ngFor="let group of nestedArray.controls; let i=index" [formGroupName]="i">
      <input formControlName="controlName" placeholder="Control Name">
      <div *ngIf="myForm.get('nestedArray').get(i.toString()).get('controlName').invalid && myForm.get('nestedArray').get(i.toString()).get('controlName').touched">
        <div *ngIf="myForm.get('nestedArray').get(i.toString()).get('controlName').errors.required">
          Control Name is required.
        </div>
      </div>
    </div>
  </div>
  <button type="submit">Submit</button>
</form>
代码语言:txt
复制
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormArray, FormControl, Validators } from '@angular/forms';

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.css']
})
export class MyComponentComponent implements OnInit {
  myForm: FormGroup;

  constructor() { }

  ngOnInit() {
    this.myForm = new FormGroup({
      nestedArray: new FormArray([
        new FormGroup({
          controlName: new FormControl('', Validators.required)
        }),
        new FormGroup({
          controlName: new FormControl('', Validators.required)
        })
      ])
    });
  }

  submitForm() {
    if (this.myForm.valid) {
      console.log(this.myForm.value);
      // 处理表单提交逻辑
    }
  }
}

在这个示例中,我们使用FormArray来表示嵌套的表单控件。myForm是一个FormGroup,其中包含一个名为nestedArrayFormArray,这个FormArray中包含两个嵌套的FormGroup。每个嵌套的FormGroup都包含一个名为controlNameFormControl,并应用了一个必填的验证规则。

模板中使用了*ngFor来迭代nestedArray.controls,并使用formGroupName来指定每个嵌套的FormGroup的名称。对于每个FormControl,我们添加了一个输入框,并根据其验证状态显示相应的错误信息。

在组件中,我们通过submitForm方法来处理表单的提交操作。如果表单验证通过,我们可以获取表单的值并进行相应的处理。

对于腾讯云相关产品和产品介绍,可以参考腾讯云的官方文档或官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Angular 从入坑到挖坑 - 表单控件概览

一、Overview angular 入坑记录的笔记第三篇,介绍 angular 中表单控件的相关概念,了解如何在 angular 创建一个表单,以及如何针对表单控件进行数据校验。...,从而生成错误信息列表 在进行用户输入数据有效性验证时,在控件上通过添加一个模板引用变量来暴露出 ngModel,从而在模板获取到指定控件的状态信息,之后就可以通过获取错误信息列表来进行反馈 <div...4.4、表单的自定义数据验证 4.4.1、自定义验证器 在很多的情况下,原生的验证规则无法满足我们的需要,此时需要创建自定义的验证器来实现 对于响应式表单,我们可以定义一个方法,对控件的数据进行校验,之后将方法作为参数添加到控件定义处即可...在模板驱动表单,因为不是直接使用的 FormControl 实例,因此这里应该在模板上添加一个自定义的指令来完成对于控件数据的校验 使用 angular cli 创建一个用来进行表单验证的指令 ng...4.4.2、跨字段的交叉验证 有时候需要针对表单的多个控件数据进行交叉验证,此时就需要针对整个 FormGroup 进行验证

18.9K20

Angular系列教程-第四节

两者都从视图中捕获用户输入事件、验证用户输入、创建表单模型、修改数据模型,并提供跟踪这些更改的途径 使用’@angular/forms’库的FormGroup, FormControl,FormArray...,FormBuilder 等类构建出的数据对象就是响应式的表单,在响应式的表单,我们会在数据源里面进行各种操作,像添加校验等,在html文件中使用 formGroup,formGroupName,formControlName...等将数据和视图进行绑定(需要引入ReactiveFormsModule) 模板驱动的表单是我们实例化好一个类的数据之后,在html中使用 NgForm 指令后将数据和表单进行绑定,使用[(ngModel...) 表单验证 同步验证器和异步验证器 备注:同步验证先执行,异步验证后执行 3.模板驱动表单使用 导入formcontrol 使用ngModel实现双向绑定 使用模板变量来获取表单 4...结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局的指令,比如ngfor、ngif 属性型指令 — 改变元素、组件或其它指令的外观和行为的指令,比如ngstyle 6.属性型指令 6.1

2.8K50
  • 使用原生 JavaScript 手写一个高效的表单验证系统

    项目需求 我们需要实现一个注册表单,其中包括以下几个字段: 用户名 邮箱 密码 确认密码 表单需要进行以下验证: 所有字段都是必填项。 用户名长度应在3到15个字符之间。...案例展示 以下是我们将实现的表单页面截图: 如何实现 我们将使用HTML、CSS和JavaScript来实现这个表单验证功能。首先,让我们看看HTML代码: <!...= input.parentElement; formControl.className = 'form-control success'; } // 验证邮箱格式 function checkEmail...事件监听:为表单添加提交事件监听器 知识点总结 表单验证:了解如何使用JavaScript进行表单验证,确保用户输入的数据是有效的。 正则表达式:学习如何使用正则表达式验证邮箱格式。...动态样式:通过JavaScript动态添加和移除CSS类,实现表单的错误和成功提示。 结束 希望这篇文章对你有所帮助!如果你在实现过程遇到任何问题,欢迎在评论区留言,我会尽快回复你。

    14710

    (转) 别再对 Angular 表单的 ControlValueAccessor 感到迷惑

    是隐式还是显式创建,都必须和原生 DOM 表单控件 input,textarea 进行交互,并且很有可能需要自定义一个表单控件作为 Angular 组件而不是使用原生表单控件,而通常自定义表单控件会封装一个使用纯...JS 写的控件 jQuery UI's Slider。...本文我将使用原生表单控件术语来区分 Angular 特定的 formControl 和你在 html 使用的表单控件,但你需要知道任何一个自定义表单控件都可以和 formControl 指令进行交互,而不是原生表单控件...实现交互(译者注:意思就是上面代码绑定的 formControl 指令,在其自身实例化时,会调用 setUpControl() 函数给同样绑定到 input的 DefaultValueAccessor...指令做好安装工作, L85,这样 formControl 指令就可以借助 DefaultValueAccessor 来和 input 元素交换数据了)。

    3.8K20

    Angular6自定义表单控件方式集成Editormd

    (isDisabled: boolean): void; } writeValue:在初始化的时候将formControl的值传递给原生表单控件(即,将模型的新值写入视图或 DOM 属性); registerOnChange...,formControl指令调用了setUpControl函数来实现formControl和ControlValueAccessor之间的交互。...其他位置也可,记得配置第3步对应的angular.json),这里添加的是精简资源,也可以把解压出来的全部放进去,效果如图: ?...注册自定义验证器 其中useExisting用来设置验证函数,可自定义: const UEDITOR_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR,...constructor() { } public onload() { } public onchange() { } } 最后记得按照正常组件进行引入和声明才可使用哦

    5.2K20

    AngularDart4.0 英雄之旅-教程-04明细 顶

    当您进行更改时,请通过重新加载浏览器窗口来保持运行。 应用程序重构 在添加新功能之前,您可以从应用程序重构受益。 应用模板文件 您将对应用程序组件的模板进行多次更新。...应用hero字段 将hero字段替换为AppComponent的公共heros字段,并使用模拟英雄进行初始化(不要忘记导入):lib/app_component.dart (heroes) import...AppComponent { final title = 'Tour of Heroes'; List heroes = mockHeroes; // ··· } 英雄数据与类实现分开...当用户选择一个英雄时,selectedHero变为非null,ngIf将英雄详细内容放入DOM,并评估嵌套的绑定。...您了解了如何在组件模板中使用核心指令ngIf和ngFor。 您在CSS文件定义了样式,并使用它们来设置应用程序的样式。 你的应用应该看起来像这个实例(查看源代码)。

    3K30

    angular知识点梳理第二篇-基本语法

    angular的基本语法,这样有利于后面我们进行梳理别的知识点做一些铺垫 基本语法 常见指令 NgModel NgModel就和vue的v-model的效果是一致的,只是写法会有一些区别,vue是可以直接进行使用的...在app.modules.ts引入forms模块 // 核心模块 import { NgModule } from '@angular/core'; //引入forms模块实现数据的双向绑定 import...-- 使用{{}}进行数据的获取 --> {{inputData}} 运行效果 NgFor NgFor和我们js的for循环渲染数据是一致的,所以这里是比较容易理解的,简单的演示一下.../home.component.less'] }) export class HomeComponent implements OnInit { //声明一个list类型的变量,用于验证NgFor.../home.component.less'] }) export class HomeComponent implements OnInit { //声明一个boolean类型的变量,用于验证ngif

    2.5K30

    AngularDart4.0 指南- 模板语法二 顶

    Save 您仍然可以从简化复杂任务的指令受益。 Angular仍然附带内置的指令; 只是没有那么。...ngFor指令迭代由父组件的heroes属性返回的heroes,并在每次迭代期间将hero设置为列表的当前项目。 要访问hero的属性,请参考ngFor宿主元素(或其后代内)的hero输入变量。...* ngFor与index(索引) NgFor指令上下文的index属性返回每个迭代项目的从零开始的索引。 您可以捕获模板输入变量的index,并在模板中使用它。...模板引用变量警告说明 模板引用变量(#phone)与模板输入变量(let phone)不同,您在*ngFor可能看到的那样。 了解“结构指令”指南中的差异。 引用变量的范围是整个模板。...接下来的部分将介绍这些操作符的两个:管道和安全导航操作符。 管道操作符(|) 在准备使用绑定之前,表达式的结果可能需要进行一些转换。

    29.9K20

    Angular 6.x 表单快速入门

    (异步) 最小化组件类的代码 不易于单元测试 Reactive 表单的特点 比较灵活 适用于复杂的场景 简化了HTML模板的代码,把验证逻辑抽离到组件类 手动创建 Form Model (同步) 方便的跟踪表单控件值的变化...第一节 - 创建最简单的输入框 如何实现双向绑定? 在 Angular 表单,我们通过 ngModel 指令来实现双向绑定。...在 Angular ,我们可以通过 #userName="ngModel" 方式获取 ngModel 对象,然后通过 userName.valid 判断表单控件是否通过验证。...在 Angular ,我们可以通过 #userName="ngModel" 方式获取 ngModel 对象,然后通过该对象的 errors 属性,来获取对应验证规则 ( required, minlength...在 Angular 表单,若验证通过则会在表单控件上添加 ng-valid 类,若验证失败则会在表单控件上添加 ng-invalid 类。

    4.6K20

    【摸鱼神器】UI库秒变低代码工具——表单篇(一)设计

    基于 el-form 封装,实现依赖 json 渲染。 实现列、验证、分栏等功能。 使用 slot 实现自定义扩展。 自定义子控件。(下篇介绍) 表单子控件的设计与实现。...验证用户输入的数据。 便于程序员实现功能。 可以列。 可以分栏。 可以自定义扩展。 其他。...el-form 实现了数据验证、自定义扩展等功能(还有漂亮的UI),我们可以直接拿过来封装,然后再补充点代码,实现列、分栏、依赖 JSON 渲染等功能。...所以只好暂时放弃对组件的 props 进行整体约束。...实现数据验证,设置 rules 属性即可,:rules="ruleMeta[ctrId] ?? []"。 实现列 使用 el-row、el-col 实现列的效果。

    2.4K10

    ng-content 隐藏的内容

    如果你尝试在 Angular 编写可重复使用的组件,则可能会接触到内容投射的概念。然后你发现了 ,并找到了一些关于它的文章,进而实现了所需的功能。...简单示例 在本文中我们使用一个示例,来演示不同的方式实现内容投影。...在我们尝试解释为什么之前,让我们再来验证一个问题,即在 ng-content 指令的外层容器添加 ngIf 指令: import { Component } from '@angular/core';...但是如果你通过按钮进行切换操作,你会注意到计数器的值不会增加。这意味着我们的计数器组件只被实例化了一次 - 从未被销毁和重新创建。...让我们再验证一下 *ngFor 指令: @Component({ selector: 'wrapper', template: ` <div class="box" *ngFor="let

    2.7K30

    AngularDart4.0 指南-体系结构概述 顶

    注意是如何在原生HTML元素合适的存放。 自定义组件与原生HTML在相同的布局无缝混合。 元数据 ? 元数据告诉Angular如何处理一个类。...在模板,它们看起来像常规的HTML属性,因此也就是名称。 实现双向数据绑定的ngModel指令是一个属性指令的例子。...他们不从服务器获取数据,验证用户输入或直接登录到控制台。 他们将这些任务委托给服务。 一个组件的工作是启用用户体验,仅此而已。...Forms:支持基于HTML验证和脏检查的复杂数据录入方案。 HTTP:与服务器通信以获取数据,保存数据并使用HTTP客户端调用服务器端操作。...Router:在客户端应用程序从一个页面到另一个页面进行导航,而不会离开浏览器 Testing:为您的应用编写组件测试和端到端测试。

    7.9K30
    领券