


Compréhension approfondie des formulaires en angulaire (responsive et basé sur des modèles)
Cet article vous présentera les formulaires dans angular, parlera des formulaires réactifs et des formulaires basés sur des modèles, et présentera comment les formulaires réactifs vérifient la saisie du formulaire. J'espère qu'il sera utile à tout le monde !
1. Introduction aux formulaires angulaires
Angular fournit deux méthodes différentes pour traiter la saisie de l'utilisateur via des formulaires : Formulaires réactifs
et Formulaires pilotés par des modèles
. Les deux capturent les événements d’entrée utilisateur à partir des vues, valident les entrées utilisateur, créent des modèles de formulaire, modifient les modèles de données et fournissent un moyen de suivre ces modifications. [Tutoriels associés recommandés : "响应式表单
和模板驱动表单
。 两者都从视图中捕获用户输入事件、验证用户输入、创建表单模型、修改数据模型,并提供跟踪这些更改的途径。【相关教程推荐:《angular教程》】
1.1 响应式表单与模板驱动表单的差异
-
响应式表单
提供对底层表单对象模型直接
、显式
的访问。它们与模板驱动表单相比,更加健壮:它们的可扩展性、可复用性和可测试性
都更高。如果表单是你的应用程序的关键部分,或者你已经在使用响应式表单来构建应用,那就使用响应式表单。 -
模板驱动表单
依赖模板中的指令
Tutoriel angulaire "]
Construire un modèle de formulaire | ||||||||||||||
Implicitement, créé par des instructions | Modèle de données... |
类 | 说明 |
---|---|
AbstractControl | 所有三种表单控件类(FormControl、FormGroup 和 FormArray)的抽象基类。它提供了一些公共的行为和属性。 |
FormControl | 管理单体表单控件的值和有效性状态。它对应于 HTML 的表单控件,比如 或 。 |
FormGroup | 管理一组 AbstractControl 实例的值和有效性状态。该组的属性中包括了它的子控件。组件中的顶层表单就是 FormGroup。 |
FormArray | 管理一些 AbstractControl 实例数组的值和有效性状态。 |
FormBuilder | 一个可注入的服务,提供一些用于提供创建控件实例的工厂方法。 |
三、模板驱动表单
在模板驱动表单中,表单模型是隐式的,而不是显式的。指令 NgModel 为指定的表单元素创建并管理一个 FormControl 实例。
下面的组件使用模板驱动表单为单个控件实现了同样的输入字段。
import { Component } from '@angular/core'; @Component({ selector: 'app-template-favorite-color', template: ` Favorite Color: <input type="text" [(ngModel)]="favoriteColor"> ` }) export class FavoriteColorComponent { favoriteColor = ''; }
四、响应式表单验证表单输入
在组件类中直接
把验证器函数添加到表单控件模型
上(FormControl)。然后,一旦控件发生了变化,Angular 就会调用这些函数。
4.1 验证器(Validator)函数
验证器函数可以是同步函数,也可以是异步函数。
- 同步验证器:这些同步函数接受一个控件实例,然后返回
一组验证错误或 null
。你可以在实例化一个 FormControl 时把它作为构造函数的第二个参数
传进去。 - 异步验证器 :这些异步函数接受一个控件实例并返回
一个 Promise 或 Observable
,它稍后
会发出一组验证错误或 null
。在实例化 FormControl 时,可以把它们作为第三个参数
传入。
出于性能方面的考虑,只有在所有同步验证器都通过之后,Angular 才会运行异步验证器。当每一个异步验证器都执行完之后,才会设置这些验证错误。
4.2 内置验证器函数
在模板驱动表单中用作属性的那些内置验证器,比如 required 和 minlength,也都可以作为 Validators 类中的函数使用
public profileForm = new FormGroup({ firstName: new FormControl('', [ Validators.required ]), }); this.profileForm.get('firstName').valueChanges.subscribe({ next: value => { console.log("First Name is: " + value); console.log(this.profileForm.get('firstName').errors);// { required: true } | null } });
<form [formGroup]="profileForm"> <label> First Name: <input type="text" formControlName="firstName"> <div *ngIf="firstName.errors?.required"> Name is required. </div> </label> </form>
4.3 定义自定义验证器
内置的验证器并不是总能精确匹配应用中的用例,因此有时你需要创建一个自定义验证器。
public profileForm = new FormGroup({ firstName: new FormControl('', [ Validators.required, this.forbiddenNameValidator(/bob/i) ]) }); public forbiddenNameValidator(nameRe: RegExp): ValidatorFn { return (control: AbstractControl): {[key: string]: any} | null => { const forbidden = nameRe.test(control.value); return forbidden ? {forbiddenName: {value: control.value}} : null; }; } get firstName() { return this.profileForm.get('firstName'); } this.profileForm.get('firstName').valueChanges.subscribe({ next: value => { console.log("First Name is: " + value); // First Name is: bob console.log(JSON.stringify(this.profileForm.get('firstName').errors));// {"forbiddenName":{"value":"bob"}} | null } });
4.4 跨字段交叉验证
跨字段交叉验证器是一种自定义验证器
,可以对表单中不同字段的值进行比较,并针对它们的组合进行接受或拒绝。
下列交叉验证的例子说明了如何进行如下操作:
- 根据两个兄弟控件的值验证响应式表单或模板驱动表单的输入,
- 当用户与表单交互过,且验证失败后,就会显示描述性的错误信息
要想在单个自定义验证器中计算这两个控件,你就必须在它们共同的祖先控件中执行验证: FormGroup。你可以在 FormGroup 中查询它的子控件,从而让你能比较它们的值。要想给 FormGroup 添加验证器,就要在创建时把一个新的验证器传给它的第二个参数。
this.profileForm.valueChanges.subscribe( { next: value => { console.log(JSON.stringify(this.profileForm.errors));// {"identityRevealed":true} | null } }); public profileForm = new FormGroup({ firstName: new FormControl('', [ Validators.required, ]), lastName: new FormControl(''), }, { validators: this.identityRevealedValidator}); public identityRevealedValidator(control: FormGroup): ValidationErrors | null{ const firstName = control.get('firstName'); const lastName = control.get('lastName'); return firstName && lastName && firstName.value === lastName.value ? { identityRevealed: true } : null; };
4.5 创建异步验证器
异步验证器实现了 AsyncValidatorFn
和 AsyncValidator
接口。它们与其同步版本非常相似,但有以下不同之处。
- validate() 函数必须返回一个
Promise 或可观察对象
, - 返回的可观察对象必须是
有尽
的,这意味着它必须在某个时刻完成(complete)
。要把无尽的可观察对象转换成有尽的,可以在管道中加入过滤操作符,比如 first、last、take 或 takeUntil。
异步验证在同步验证完成后才会发生
,并且只有在同步验证成功时才会执行。如果更基本的验证方法已经发现了无效输入,那么这种检查顺序就可以让表单避免使用昂贵的异步验证流程(例如 HTTP 请求)。
4.6 触发某个formControlName
let formControl = this.profileForm.get('firstName'); formControl.updateValueAndValidity();
更多编程相关知识,请访问:编程视频!!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Angular.js est une plateforme JavaScript librement accessible pour créer des applications dynamiques. Il vous permet d'exprimer rapidement et clairement divers aspects de votre application en étendant la syntaxe HTML en tant que langage de modèle. Angular.js fournit une gamme d'outils pour vous aider à écrire, mettre à jour et tester votre code. De plus, il offre de nombreuses fonctionnalités telles que le routage et la gestion des formulaires. Ce guide expliquera comment installer Angular sur Ubuntu24. Tout d’abord, vous devez installer Node.js. Node.js est un environnement d'exécution JavaScript basé sur le moteur ChromeV8 qui vous permet d'exécuter du code JavaScript côté serveur. Être à Ub

Cet article vous amènera à continuer à apprendre Angular et à comprendre brièvement le composant autonome (Standalone Component) dans Angular. J'espère qu'il vous sera utile !

Cet article vous donnera une compréhension approfondie du gestionnaire d'état NgRx d'Angular et vous présentera comment utiliser NgRx. J'espère qu'il vous sera utile !

Comment utiliser monaco-editor en angulaire ? L'article suivant enregistre l'utilisation de monaco-editor dans angulaire qui a été utilisé dans une entreprise récente. J'espère qu'il sera utile à tout le monde !

Cet article partagera avec vous une expérience pratique d'Angular et apprendra comment développer rapidement un système backend en utilisant Angualr combiné avec ng-zorro. J'espère que cela sera utile à tout le monde !

Connaissez-vous Angular Universel ? Cela peut aider le site Web à fournir un meilleur support SEO !

Avec le développement rapide d'Internet, la technologie de développement front-end s'améliore et se répète constamment. PHP et Angular sont deux technologies largement utilisées dans le développement front-end. PHP est un langage de script côté serveur capable de gérer des tâches telles que le traitement des formulaires, la génération de pages dynamiques et la gestion des autorisations d'accès. Angular est un framework JavaScript qui peut être utilisé pour développer des applications monopage et créer des applications Web composées de composants. Cet article explique comment utiliser PHP et Angular pour le développement front-end et comment les combiner.

Le comportement d'affichage par défaut des composants du framework Angular ne concerne pas les éléments au niveau du bloc. Ce choix de conception favorise l'encapsulation des styles de composants et encourage les développeurs à définir consciemment la manière dont chaque composant est affiché. En définissant explicitement l'affichage des propriétés CSS, l'affichage des composants angulaires peut être entièrement contrôlé pour obtenir la mise en page et la réactivité souhaitées.
