[[oktatas:web:angular|< Angular]] ====== Angular - Reaktív űrlapépítő ====== * **Szerző:** Sallai András * Copyright (c) 2025, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Szükséges modulok ===== import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; //... imports: [ReactiveFormsModule],
A ReactiveFormsModule szükséges a reaktív űrlapok használatához. Ha a reaktív űrlapot csoportosítva használjuk, akkor szükség van a FormGroup-ra is. Ha a csoportot FormBuilder-rel építjük, akkor természetesen a FormBuilder-re is szükség van. A FormControl-t használjuk az egyes űrlap mezők meghatározásához. ===== Bevitel ===== Az egyes input elemekhez kötelezően egy formControlName attribútumot készítünk. TypeScript oldalon ezeken a neveken lehet elérni az input elemek tartalmát. ===== Kattintás ===== A kattintás általában egy nyomógombra történik. A nyomógomb kétféle eseményt válthat ki: * click * submit Attól függ milyen típusú. vagy . A submit eseményt viszont a form elemen kell figyelnünk. export class AppComponent { employeeForm !: FormGroup; constructor(private formBuilder: FormBuilder) {} ngOnInit() { this.employeeForm = this.formBuilder.group({ name: new FormControl(''), city: new FormControl(''), salary: new FormControl('') }) } onSubmit() { console.log(this.employeeForm.value); } } Az önálló űrlap elemeket a fomr elemmel csoportosítjuk. Ehhez használjuk az Angular [fromGrup] direktíváját. Az űrlapot célszerű submit eseménnyel kezelni, akkor használhatjuk a (ngSubmit) direktívát. Ha button elemet hozunk létre, annak típusa legyen submit, hiszen csak így tudjuk kiváltani a submit eseményt.
===== Teljes kód ===== import { Component } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; @Component({ selector: 'app-root', standalone: true, imports: [ReactiveFormsModule], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { employeeForm !: FormGroup; constructor(private formBuilder: FormBuilder) {} ngOnInit() { this.employeeForm = this.formBuilder.group({ name: new FormControl(''), city: new FormControl(''), salary: new FormControl('') }) } onSubmit() { console.log(this.employeeForm.value); } }
Eredmény: { "name": "Mari", "city": "Pécs", "salary": "391" } ===== Rövidítés ===== A FormControl konstruktorok hívása helyett elég egy szögletes zárójelben leírni egy mező tulajdonságait. import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'; //... ngOnInit() { this.employeeForm = this.formBuilder.group({ name: [''], city: [''], salary: [''] }) } A FormControl törölhető az import sorból. ===== Érvényesség ellenőrzése ===== Az érvényesség használatához rendelkezésre áll egy Validators nevű osztály. Ennek statikus tagjaival különféle érvényességeket vizsgálhatunk. import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; Az érvényesség használata rövidítés esetén: ngOnInit() { this.employeeForm = this.formBuilder.group({ name: ['', Validators.required], city: [''], salary: [''] }) }