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

期望验证器返回Promise或可观察的异步验证器FormGroup angular 7

在Angular 7中,期望验证器返回Promise或可观察的异步验证器是用于实现表单验证的一种方式。它允许我们在表单中使用异步验证器来验证用户输入的数据。

在Angular中,表单验证是通过Validators模块来实现的。Validators模块提供了一些内置的验证器,如required、minLength、maxLength等。但是有时候我们需要进行异步验证,例如从服务器端获取数据进行验证,这时就需要使用异步验证器。

异步验证器可以是一个返回Promise或可观察对象的函数。当表单控件的值发生变化时,Angular会调用异步验证器函数,并等待它返回一个Promise或可观察对象。如果返回的是一个Promise,Angular会等待Promise的解析结果,如果返回的是一个可观察对象,Angular会订阅该可观察对象并等待其发出值。

下面是一个示例,演示如何在Angular 7中使用期望验证器返回Promise或可观察的异步验证器:

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

@Component({
  selector: 'app-my-form',
  template: `
    <form [formGroup]="myForm">
      <input type="text" formControlName="myControl">
      <div *ngIf="myForm.get('myControl').pending">正在验证...</div>
      <div *ngIf="myForm.get('myControl').errors?.asyncValidator">异步验证失败</div>
    </form>
  `
})
export class MyFormComponent {
  myForm: FormGroup;

  constructor() {
    this.myForm = new FormGroup({
      myControl: new FormControl('', null, this.asyncValidator)
    });
  }

  asyncValidator(control: FormControl): Promise<any> {
    return new Promise((resolve, reject) => {
      // 异步验证逻辑,例如从服务器端获取数据进行验证
      // 如果验证通过,调用resolve(null),否则调用resolve({ asyncValidator: true })
    });
  }
}

在上面的示例中,我们创建了一个名为myForm的FormGroup,并在其中添加了一个名为myControl的FormControl。在FormControl的构造函数中,我们传入了一个异步验证器函数this.asyncValidator

异步验证器函数asyncValidator接收一个FormControl作为参数,并返回一个Promise。在异步验证器函数中,我们可以执行异步操作,例如从服务器端获取数据进行验证。如果验证通过,我们调用resolve(null),否则调用resolve({ asyncValidator: true })

在模板中,我们使用myForm.get('myControl').pending来判断异步验证是否正在进行中。如果正在进行中,我们显示"正在验证..."的提示信息。如果验证失败,我们使用myForm.get('myControl').errors?.asyncValidator来判断,并显示"异步验证失败"的提示信息。

这是一个基本的示例,你可以根据实际需求进行修改和扩展。关于Angular表单验证和异步验证器的更多信息,你可以参考腾讯云的相关文档和教程:

请注意,以上链接是腾讯云的相关文档和教程,仅供参考。

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

相关·内容

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

4.2.3、数据有效性验证 某些时候需要对于用户输入信息做有效性验证,此时可以在控件上添加上原生 HTML 表单验证来设定验证条件,当表单控件数据发生变化时,angular 会通过指令方式对数据进行验证...同模板驱动表单数据有效性验证相同,在响应式表单中同样可以使用原生表单验证,在设定规则时,需要将模板中控件名对应数据值第二个参数改为验证规则 在响应式表单中,数据源来源于组件类,因此应该在组件类中直接把验证函数添加到对应...4.4、表单自定义数据验证 4.4.1、自定义验证 在很多情况下,原生验证规则无法满足我们需要,此时需要创建自定义验证来实现 对于响应式表单,我们可以定义一个方法,对控件数据进行校验,之后将方法作为参数添加到控件定义处即可...g directive direactives/hero-validate 在创建完成指令之后,我们需要将这个指令将该验证添加到已经存在验证集合中,同时为了使这个指令可以与 angular 表单集成在一起...因此这里验证方法需要在定义控件组时作为 FormGroup 参数传入 与单个字段验证方式相似,通过实现 ValidatorFn 接口,当表单数据有效时,它返回一个 null,否则返回 ValidationErrors

18.9K20

Angular系列教程-第四节

1.表单 Angular 提供了两种不同方法来通过表单处理用户输入:响应式表单和模板驱动表单。...两者都从视图中捕获用户输入事件、验证用户输入、创建表单模型、修改数据模型,并提供跟踪这些更改途径 使用’@angular/forms’库中FormGroup, FormControl,FormArray...) 表单验证 同步验证异步验证 备注:同步验证先执行,异步验证后执行 3.模板驱动表单使用 导入formcontrol 使用ngModel实现双向绑定 使用模板变量来获取表单 4....内置验证 min 此验证要求控件值大于或等于指定数字 max 此验证要求控件值小于等于指定数字 required 此验证要求控件具有非空值 requiredTrue 此验证要求控件值为真...创建 6.2引入 6.3编写 7.自定义指令 directive

2.8K50
  • Angular2 :从 beta 到 release4.0 版本升级总结

    Angular 模块是带有 @NgModule 装饰函数类。 @NgModule 接收一个元数据对象,该对象告诉 Angular 如何编译和运行模块代码。...它标记出该模块拥有的组件、指令和管道, 并把它们一部分公开出去,以便外部组件使用它们。 它可以向应用依赖注入中添加服务提供商。 具体请参考官方文档。...'; => import {FormGroup} from '@angular/forms'; // Control => FormControl import {Control} from 'angular2...升级angular(v2.4.0)到(v4.1.1)版本后,左侧导航状态定位失效 原因:升级后,router和componenthook顺序调整(仅根据个人观察,未经验证),导致组件状态未能在路由事件结束...7. 在webstorm里,更改文件不能在浏览中更新输出。 原因:webstorm里面默认启用”safe write”,将保存先存到临时文件。

    8.1K00

    angular面试题及答案_angular面试

    angular每次销毁组件或指令之前调用,通常用于移除事件监听,退订可观察对象。...当observable或promise返回data时,我们使用一个临时属性来保存内容。稍后,我们将相同内容绑定到模板。...Authentication (认证) : 用户登录凭据传递给(服务)认证API。在服务验证凭据并返回JSON Web Token(JWT)。...– 下载代码 – 启动angular – 页面渲染 AOT优势   1、渲染得更快   2、需要异步请求更少   3、需要下载Angular框架体积更小...用于取消订阅 – 作用: — 作为生产者和观察者之间桥梁,并返回一种方法来解除生产者和观察者之间关系,其中观察者用于处理时间

    11K120

    TW洞见〡为什么你Angular代码很难测试?

    我们应该设法让测试更简单,通过将Ajax请求封装到service中,我们只需要让被mockservice返回我们期望结果就可以了。...4 使用Promise处理Ajax返回值, 而不是传递回调函数 Angular中所有的Ajax请求默认都返回一个Promise对象,不建议将处理Ajax返回逻辑通过回调函数形式传递给发送http...这里处理办法是将快递地址验证失败或成功之后处理函数都传给了deliveryService,当验证结果从服务返回之后,相应处理函数会被执行。这做写法其实是比较常见,但是问题出在哪里呢?...原因就在于这是一个异步请求,所以需要在发请求时候就将对处理函数绑定上去。...正确打开方式应该是这样:serviceAPI只需要返回promise,对应处理函数绑定在这个返回promise上,这样我们只需要mock那个service接口让它返回一个我们期望promise

    1.5K30

    Angular 表单3--响应式表单 复杂验证

    表单验证是前端开发中重要并且常见工作 比如下面的表单包含三个字段: 验证要求: name: 必填 Category: 必填,只能输入大小写,字符长度3到10 Price:必填,只能输入不超过...image.png 我们可以借助AngularformControl来实现,这里我们基于FormControl创建一个子类ProductFormControl来提高可复用性 核心代码: form.model.ts...只包含一个收集表单错误信息方法 import { FormControl, FormGroup, Validators } from "@angular/forms"; // 自定义验证 import....forEach(m => messages.push(m))); return messages; } } 其中 limit.formvalidator.ts 封装了一个验证长度限制自定义验证...,直接引入 form.model import { Component } from "@angular/core"; import { NgForm } from "@angular/forms";

    2.4K30

    当nz-checkbox-group多选框组遇上必选校验

    当nz-checkbox-group多选框组遇上必选校验 Angular2 ng-zorro-antd checkbox 今天表单中用到ng-zorro-antd组件多选框nz-checkbox-group...,最开始用是响应式表单验证+响应式表单验证,结果总是无法达到预期效果。...one').hasError('required')">通知范围必选 问题.ts 这里仅列出关键代码部分 validateForm: FormGroup...在刷了n+1遍ng-zorro-antd官方文档表单部分后,在“自定义异步校验”中看到这样一句话 : 当使用 响应式表单(Reactive Form) 时, ...nzValidateStatus 会自动从 NgControl 中获取数据,也可以手动指定特定 NgControl组件将表单校>验函数校验过程和异步返回结果显示对应error | validating

    4.3K20

    Angular: 最佳实践

    这很有用,因为当服务端提供一个 User 实例数据给你,它只能返回字符串类型时间给你,但是你可能有一个 datepicker 控件,它将日期作为有效 JS Date 对象返回,并且为了避免数据被误解...如果我们有一个 Order 类型变量,我们只能将这三个字符串中一个分配给 status 字段,分配其他类型 TS 编辑都会跑出错误。...在应用程序 tsconfig.json 文件中,我们可以设置这个标志,告诉编辑在未明确类型时候抛出错误。否则,编辑坚定它无法推断变量类型,而认为是 any 类型。...比如,你 API 提供了一个接入点,返回一个 Country 对象 JSON 对象,你可以在应用程序使用这列表数据实现选择国家/地区功能。...,甚至可以轻松地测试我们验证是否与单元测试一起正常工作,而无需深入查看视图。

    2.8K40

    2018年前端面试总结

    400 (错误请求) 服务不理解请求语法。 401 (未授权) 请求要求身份验证。 对于需要登录网页,服务可能返回此响应。 403 (禁止) 服务拒绝请求。...416 (请求范围不符合要求) 如果页面无法提供请求范围,则服务返回此状态代码。 417 (未满足期望值) 服务未满足"期望"请求标头字段要求。...简述vue、react、angular 一、Angular特性: 由自己实现一套模板编译规则,数据变化依赖脏检查, 基本属性包括:数据双向绑定、基本模板指令、自定义指令、表单验证、路由操作、依赖注入...async/await 是写异步代码新方式,以前方法有回调函数和Promise。 async/await是基于Promise实现,它不能用于普通回调函数。...从语法上说,Promise 是一个对象,从它可以获取异步操作消息。Promise 提供统一 API,各种异步操作都可以用同样方法进行处理。

    71920

    理论 | Angular响应式编程 -- 浅淡 Rx 流式思维

    作者|接灰电子产品 原文|http://www.jianshu.com/p/925adede7c60 为什么要做响应式编程? 我给出答案很简单:响应式编程可以让你把程序逻辑想很清楚。...Angular 中处理响应式表单只有 3 个步骤: 1、在组件 HTML 模版中给要处理控件加上 formControlName="blablabla" 2、form 标签中添加 [formGroup...这个 valueChanges 返回其实就是一个 Observable ,见下面的 TypeScript 定义: 既然我们得到了这个原始数据流,剩下工作就比较简单了。...这就需要一个滤波处理 .debounceTime(500),我们不去处理 500 毫秒内变化,而是等待其输入停顿时再发送数据。...$ 订阅后值,那么 | async 是说 computed$ 是一个 Observable,请对他采用异步处理,即初始化时自动订阅以及在组件销毁时自动取消订阅。

    5.2K10

    高级 Vue 组件模式 (7)

    对于无法更改开关状态问题,似乎无法简单通过声明一个 prop 属性方式来解决,并且如果我们期望更改逻辑是异步的话,同样无法满足。... 重置开关状态 为了能够从外部更改 toggle 组件开关状态,我们可以在组件内部声明一个观测 on prop 属性监听,比如: watch: { on(val){...支持异步重置 在实现同步重置基础上,实现异步重置十分简单,通常情况下,处理异步较好方式是使用 Promise,使用 callback 也可以,使用 Observable 也是不错选择,这里我们选择...}) 而 onReset 函数如果返回是一个 Promise 实例的话,Promise.resolve 也会正确解析到当它为 fullfill 状态值,这样关于 reset 方法我们改版如下...,这其实是工厂模式一种体现,在其他框架中也有体现,比如 React 中,HOC 中提及 render props 就是一种比较具体应用,Angular 在声明具有循环依赖 Module 时,可以通过

    64710

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

    为了支持使用 View Engine 函数库应用程序向后兼容,Angular 官方团队开发了 ngcc 相容编译,ngcc 是编译 View Engine 函数库方法,可以让 Ivy 应用程序方便地使用...严格 null 检查将报告各可能为 null 片段。这同样是一项重大变化。 APP-INITIALIZER 令牌类型有所变更,旨在准确反映 Angular 处理返回值类型。同样属于重大变化。...向 FormArray 与 FormGroup 中引入 emitevent 选项。也是一项重大变化。 向 routerLinkActiveOptions 中引入更多微调控件。...在表单中,引入最小与最大值验证。 新版本可导出 HTTP 状态码列表。 向 Angular 语言服务添加一项功能,允许用户直接访问使用模板文件组件实际位置。...新版本还对大量 bug 做出修复,进一步完善了编译、compiler-cli、Bazel 构建工具、路由以及 Angular 内其他组件运行质量。

    4.4K10

    「Nodejs进阶」一文吃透异步IO和事件循环

    6 setTimeout 是精确吗,什么情况影响 setTimeout 执行? 7 nodejs 中事件循环和浏览有什么不同 ?...}) 回调 callback 被异步执行,返回第一个参数是错误信息,如果没有错误,那么返回 null ,第二个参数为 fs.readFile 执行得到真正内容。...异步 I/O 操作机制 上述讲了整个异步 I/O 执行流程,从一个异步 I/O 触发,到 I/O 回调到执行。事件循环 ,观察者 ,请求对象 ,线程池 构成了整个异步 I/O 执行模型。...9.jpg timer 特性 这里有两点需要注意: 执行机制 :延时计时观察者,每一次都会执行一个,执行一个之后会清空 nextTick 和 Promise, 过期时间是决定两者是否执行重要因素,...setImmediate执行流程图 13.jpg setTimeout & setImmediate 接下来对比一下 setTimeout 和 setImmediate,如果开发者期望延时执行异步任务

    2.1K20

    新手们容易在Promise上挖坑~

    本文翻译至Nolan Lawson一篇博客——《We have a problem with promises》 关于Promise 大家通常认为Promise是ES6提供一个书写异步代码解决方案...希望通过列举出下面新手错误让大家能巩固一下关于Promise基础知识 新手错误列举 #1 回调地狱版Promise 观察大家如何使用 PouchDB 这类大型 promise 风格API,我发现大量错误...这个 bug 可能会在一些古怪竞态问题或一些特定浏览中暴露出来,并且到时可能几乎没有可能去定位问题。 简而言之,forEach()/for/while 并非你寻找解决方案。...这个新 promise 会在数组中所有的 promises 都成功返回后才返回。他是异步 for 循环。...此外一个更加有用特效是,一旦数组中 promise 任意一个返回错误,Promise.all() 也会返回错误。 #3 忘记使用.catch() 这是另一个常见错误。

    1.5K50

    (数据科学学习手札113)Python+Dash快速web应用开发——表单控件篇(下)

    Form()与FormGroup()被设计用于更快捷地排布我们表单控件,使用逻辑是先用FormGroup()组织好每一个表单控件,再将若干个FormGroup()形成列表作为Form()children...; dbc.FormFeedback() dbc.FormFeedback()作用比较有意思,它可以帮助我们简化对表单控件输入内容验证过程,其参数valid同之前介绍过Input()部件valid...有了今天知识内容基础,加上之前教程内容铺垫,我们可以开始用Dash书写一些形式更加丰富多样web应用,比如一个在线英雄联盟英雄资料查看,后台通过爬取LOL官网实时数据,实现全英雄资料查询,先来一睹效果如何吧...~   可以看到效果非常不错,并且纯Python编写,下面我大致介绍一下整体思路:   1.抓包LOL官网,爬取全英雄名称与id信息,并继续抓包找到传递每个英雄单独详细信息异步请求;   2.利用今天所学...Form()和FormGroup()轻松搭建出界面上方三个控件;   3.编写回调,基于用户选择内容,以及查询按钮点击情况,来异步渲染出下方Tabs()+Tab()区域内容,其中大量使用到列表推导非常方便

    1.1K20

    炫酷!纯Python开发LOL英雄信息查询平台

    Form()与FormGroup()被设计用于更快捷地排布我们表单控件,使用逻辑是先用FormGroup()组织好每一个表单控件,再将若干个FormGroup()形成列表作为Form()children...; 「dbc.FormFeedback()」 dbc.FormFeedback()作用比较有意思,它可以帮助我们简化对表单控件输入内容验证过程,其参数valid同之前介绍过Input()部件valid...有了今天知识内容基础,加上之前教程内容铺垫,我们可以开始用Dash书写一些形式更加丰富多样web应用,比如一个「在线英雄联盟英雄资料查看」,后台通过爬取LOL官网实时数据,实现全英雄资料查询,...「抓包」LOL官网,爬取全英雄名称与id信息,并继续抓包找到传递每个英雄单独详细信息异步请求; 2.利用今天所学Form()和FormGroup()轻松搭建出界面上方三个控件; 3.编写回调,基于用户选择内容...,以及「查询」按钮点击情况,来异步渲染出下方Tabs()+Tab()区域内容,其中大量使用到列表推导非常方便; 4.最后「皮肤一览」区域轮播图片结合了bootstrap知识,对https://www.runoob.com

    1K20
    领券