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

Angular 9 FormArray条件验证-订阅问题

Angular 9是一种流行的前端开发框架,它提供了丰富的功能和工具来构建现代化的Web应用程序。在Angular 9中,FormArray是一种表单控件,用于处理动态的表单数组。它允许我们在表单中动态添加或删除表单控件,并提供了条件验证的功能。

FormArray条件验证是指根据特定条件对表单数组中的每个表单控件进行验证。当满足特定条件时,表单控件将被标记为有效或无效。这在处理复杂的表单场景中非常有用,例如根据用户的选择动态添加或删除表单字段,并根据不同的条件验证这些字段。

在Angular 9中,我们可以通过订阅FormArray的valueChanges事件来实现条件验证。valueChanges事件会在FormArray的值发生变化时触发,我们可以在事件处理程序中编写逻辑来根据特定条件对表单控件进行验证。

以下是一个示例代码,演示了如何使用FormArray条件验证:

代码语言:txt
复制
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, FormArray } from '@angular/forms';

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

  ngOnInit() {
    this.myForm = new FormGroup({
      items: new FormArray([])
    });

    // 订阅FormArray的valueChanges事件
    this.myForm.get('items').valueChanges.subscribe((value) => {
      // 根据特定条件对表单控件进行验证
      const formArray = this.myForm.get('items') as FormArray;
      formArray.controls.forEach((control) => {
        if (control.value === 'example') {
          control.setErrors({ invalid: true });
        } else {
          control.setErrors(null);
        }
      });
    });
  }

  addItem() {
    const formArray = this.myForm.get('items') as FormArray;
    formArray.push(new FormControl(''));
  }

  removeItem(index: number) {
    const formArray = this.myForm.get('items') as FormArray;
    formArray.removeAt(index);
  }
}

在上述代码中,我们创建了一个名为myForm的FormGroup,并在其中添加了一个名为items的FormArray。我们订阅了items的valueChanges事件,并在事件处理程序中对表单控件进行条件验证。如果表单控件的值等于'example',我们将其标记为无效,否则将其标记为有效。

在模板文件(my-form.component.html)中,我们可以使用ngFor指令来动态渲染表单控件,并提供添加和删除控件的功能。

代码语言:txt
复制
<form [formGroup]="myForm">
  <div formArrayName="items">
    <div *ngFor="let item of myForm.get('items').controls; let i = index">
      <input type="text" [formControlName]="i">
      <button (click)="removeItem(i)">Remove</button>
    </div>
  </div>
  <button (click)="addItem()">Add</button>
</form>

上述代码中,我们使用ngFor指令遍历items表单数组,并为每个表单控件创建一个输入框。我们还提供了一个添加按钮和一个删除按钮,用于添加和删除表单控件。

这是一个简单的示例,演示了如何在Angular 9中实现FormArray条件验证。根据具体的业务需求,你可以根据需要扩展和修改代码。

腾讯云提供了丰富的云计算产品和服务,可以帮助开发者构建和部署各种类型的应用程序。对于Angular 9开发者,腾讯云的云服务器CVM、云数据库MySQL、云存储COS等产品都是很好的选择。你可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息和使用指南。

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

相关·内容

Angular企业级开发(9)-前后端分离之后添加验证

后台必须保证当前用户输入的验证码是用户开始请求页面时候的验证码,必须保证验证码的唯一性。举个例子: A用户看到的验证码是:ABC;B用户看到的验证码是:DEF。...4.IE9下的bug 以为大功告成,然后在IE9浏览器上测试一下,发现无法加载到验证码,而且控制台报错误。...折腾半天,发现IE9不支持window.URL.createObjectURL();,而且AngularJS发送请求加载二进制流文件就报错。...为了支持IE9,目前解决方法是让后台不返回二进制流文件,而是返回base64编码的字符串,这样IE9也是支持的。 5.可选一种方式 和之前同事交流一番,同事提出了一个可选的方案。...因为我们在请求验证码的时候有2个内容,一个是验证码id,一个验证码图片。

1.8K100

Angular系列教程-第四节

1.表单 Angular 提供了两种不同的方法来通过表单处理用户输入:响应式表单和模板驱动表单。...两者都从视图中捕获用户输入事件、验证用户输入、创建表单模型、修改数据模型,并提供跟踪这些更改的途径 使用’@angular/forms’库中的FormGroup, FormControl,FormArray...(导入Validators,设置字段属性) 表单状态(status) formarray(管理任意数量控件) 表单验证 同步验证器和异步验证器 备注:同步验证先执行,异步验证后执行 3....required 此验证器要求控件具有非空值 requiredTrue 此验证器要求控件的值为真 email 此验证器要求控件的值能通过 email 格式验证。...maxLength 此验证器要求控件值的长度小于等于所指定的最大长度。当使用 HTML5 的 maxLength 属性时,此验证器也会生效。 pattern 此验证器要求控件的值匹配某个正则表达式。

2.8K50

移除 View Engine 转用 Ivy,盘点Angular 12的重要更新

为了确保 Angular 能够提供良好的类型检查、快速侦测变更,Angular 官方团队一直在调整静态检查和动态构建的平台。...事实上,从 Angular 9 开始,新的 Angular 应用程序就默认启用 lvy。...为了解决这个问题Angular 官方团队发布了 lvy 函数库发布计划,新的应用程序开发可以直接使用 lvy。 据了解,目前绝大多数的应用程序都在使用 lvy。...向 FormArray 与 FormGroup 中引入 emitevent 选项。也是一项重大变化。 向 routerLinkActiveOptions 中引入更多微调控件。...在表单中,引入最小与最大值验证器。 新版本可导出 HTTP 状态码列表。 向 Angular 语言服务添加一项功能,允许用户直接访问使用模板文件的组件的实际位置。

4.4K10

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

对应官方文档地址: Angular 表单简介 响应式表单 模板驱动表单 表单验证 配套代码地址:angular-practice/src/forms-overview 二、Contents Angular...四、Step by Step 4.1、表单简介 用来处理用户的输入,通过从视图中捕获用户的输入事件、验证用户输入的是否满足条件,从而创建出表单模型修改组件中的数据模型,达到获取用户输入数据的功能 模板驱动表单...4.2.3、数据的有效性验证 某些时候需要对于用户输入的信息做有效性验证,此时可以在控件上添加上原生的 HTML 表单验证器来设定验证条件,当表单控件的数据发生变化时,angular 会通过指令的方式对数据进行验证...FormBuilder 类的方式来简化的完成表单的构建 FormBuilder 服务有三个方法:control、group 和 array,用于在组件类中分别生成 FormControl、FormGroup 和 FormArray...from '@angular/forms'; // 引入 Validators 验证器 import { Validators } from '@angular/forms'; /** * 自定义验证方法

18.9K20

Rxjs&Angular-退订可观察对象的n种方式

原文/出处: RxJS & Angular — Unsubscribe Like a Pro 在angular项目中我们不可避免的要使用RxJS可观察对象(Observables)来进行订阅(Subscribe...简单起见, 我们可以使用Subscription.EMPTY来初始化一个订阅对象(Subscription), 这样可以防止在取消订阅时遇到空引用对问题....this.emission = emission)); } ngOnDestroy(): void { this.subscription.unsubscribe(); } } 为了验证代码有效我们在三秒后从...DOM中移除这个组件 如上所述, 这是最基本对取消订阅的方式, 如果我们的组件类中只有一个订阅对象(Subscription), 这种方式没什么问题....你只需创建可观察对象(Observables)然后Angular会帮助你进行订阅和取消订阅. 方式4 takeUntil 操作符 RxJS包含许多有用的操作符, takeUntil就是其中之一.

1.2K00

前端面试知识点

., last-color); transition 需要触发条件,而且只有开始和结束之间的过渡。 animation:不需要触发,中间可以插入无数关键帧。...MVVM = MVP + 新特性(bind等) 平时怎么解决浏览器兼容问题(具体问题的解决方案) 1、默认padding,margin不同 解决:自定义初始化css 2、在一个div中放一个img,但是...这是浏览器的解析问题,不同的浏览器间隔的还不同。 foxfire是5px,chrome是3px。...以下浏览器对 html5 新增标签不识别的问题。...组件 服务 管道 什么是依赖注入 如何使用路由 参数快照 参数订阅 响应式编程 angular中的模板式表单和响应式表单 如何做表单验证 angular-cli的使用方式 如何创建组件 创建服务 创建类

1.6K10

Node.js-具有示例API的基于角色的授权教程

更新历史: 2020年7月2日-更新至express-jwt版本6.0.0以修复安全漏洞 2020年5月15日-添加了有关使用Angular 9客户端应用程序运行Node.js api的说明 2018年...使用基于Node.js角色的Auth API运行Angular 9客户端应用 有关示例Angular 9应用程序的完整详细信息,请参阅Angular 9 - Role Based Authorization...1.从https://github.com/cornflourblue/angular-9-role-based-authorization-example下载或克隆Angular 9教程代码 2.通过从项目根文件夹...订阅我的YouTube频道,或者在Twitter或GitHub上关注我,以便在我发布新内容时收到通知。...在https://www.youtube.com/c/JasonWatmore上在YouTube上订阅 在Twitter上关注我,网址为https://twitter.com/jason_watmore

5.7K10

浅谈Angular

1.准备工作: ①全局安装 Angular CLI。...--2.路径参数传值,直接把要传递的参数写到routerLink的对应的值数组里,需要对路由配置做设置--> 商品展示... 参数订阅(RxJS) 遇到的问题:数据不会及时更新,原因:组件的ngOnInit方法只会在其被创建时走一次,如果该组件不销毁,init方法不会再走,导致当前数据无法更新 解决办法...: 使用RxJS解决,RxJS提供响应式开发(基于观察者模式),我们可以订阅某个值,一旦该值被订阅,如果其存储的数据发生变化,订阅者就会收到通知,进而做出对应的处理 注意点: AngularJS...里,并不是所有的值都可以被订阅,只有Observable类或者Observable的子类创建出的对象可以被订阅 subscribe是Observable类下的一个函数。

4.4K10

【17】进大厂必须掌握的面试题-50个Angular面试

我们整理了一份主要的Angular面试问题清单,分为三部分: 角度面试问题–初学者水平 角度面试问题–中级 角度面试问题–高级 初学者水平–面试问题 1.区分Angular和AngularJS...支持验证 客户端和服务器之间的通讯便利 支持依赖注入 具有强大的功能,例如事件处理程序,动画等。...9.您对Angular中的控制器了解多少? 控制器是JavaScript函数,可为HTML UI提供数据和逻辑。顾名思义,它们控制数据如何从服务器流到HTML UI。 10....3.它们不支持条件,循环和异常。 3.它们确实支持条件,循环和异常。 4.它们支持过滤器。 4.他们不支持过滤器。 18.列出使用核心Angular功能在应用程序模块之间进行通信的方式。...ngOnDestroy: 在Angular销毁组件之前立即调用它。您可以使用此钩子来取消订阅可观察对象并分离事件处理程序,以避免发生任何类型的内存泄漏。

41.2K51

React 结合 Rxjs 使用,管理数据

比如我们之前讲解的 了解 Angular 开发的内容 - 服务 Service 和 Rxjs 中怎么处理和抓取错误。当然,Rxjs 还可以用来管理数据,在组件中传递数据~这是我们本文需要了解的内容。...rxjs 截止发文,安装的版本为 "rxjs": "^7.8.0" 结合 React,使用 Rxjs 下面,我们以获取用户登陆的信息为例子,演示如何使用 rxjs 管理数据,在 vue 中同理~ PS angular-cli...项目中已经默认集成了 TypeScript 形式的 Rxjs,请参考 了解 Angular 开发的内容 - 服务 Service 写法使用 我们新建一个数据管理的 javascript 文件: /...name="phone" label='联系方式' rules={[{ required: true, pattern: /^[1][0-9]...setUserInfo 无效 setUserInfo(data); } } }) return () => { // 取消订阅

1.7K30

angular框架发展史

这是很多初学者都会遇到的问题,应该是吧,不然怎么总能听到有人既说angularjs,又说angular呢,但是其实这两个名称指的是angular的不同时期。...高速发展 如果你不是经常使用angular的话,当你重新关注它的时候,你会发现它的最新版本已经是Anguar 9了,要知道之前用了8年才发布了一个主版本,而现在4年时间已经发布了8个版本。...而Angular就采用了typescript来进行框架的构建,这样使得它的开发迭代变得异常迅猛。 rxjs 它是使用Observables进行响应式编程库,表示我们可以订阅异步数据流。...Zone.js 我们知道js是异步执行的,当代码很多的时候,如果想要统计执行时间将变得非常困难,而zone.js解决了这些问题,zone.js能实现异步Task跟踪,分析,错误记录、开发调试跟踪等,通过它的钩子...代码将变得更加简洁,代码将会得到大幅压缩,而这也是Angular 9默认开启的,当然,如果你不想使用这个引擎的话,也可以进行关闭。

1.1K30
领券