oktatas:web:angular:angular_18_reaktiv_urlap_alcsoporttal_toembbel
Különbségek
A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalonElőző változat | |||
oktatas:web:angular:angular_18_reaktiv_urlap_alcsoporttal_toembbel [2024/10/25 06:53] – [FormArray] admin | oktatas:web:angular:angular_18_reaktiv_urlap_alcsoporttal_toembbel [2025/03/02 16:54] (aktuális) – eltávolítva admin | ||
---|---|---|---|
Sor 1: | Sor 1: | ||
- | [[oktatas: | ||
- | |||
- | ====== Angular 18 Reaktív űrlap alcsoporttal, | ||
- | |||
- | * **Szerző: | ||
- | * Copyright (c) 2024, Sallai András | ||
- | * Licenc: [[https:// | ||
- | * Web: https:// | ||
- | |||
- | ===== FormArray ===== | ||
- | |||
- | A FormArray egy lehetőség az Angularban, hogy kezeljük a Form kontrollon belüli gyűjteményeket. A Form kontrollok lehetnek FormGroup, FormControl stb. | ||
- | |||
- | Minden kontroll egy kulcs-érték párt képvisel. A FormArray segítségével a kontroll egy egész tömböt tartalmaz. | ||
- | |||
- | ===== TypeScript ===== | ||
- | |||
- | A példánkban a telefonszámokat szeretnénk tömbben tárolni. Szeretnék lehetőséget új telefonszámok felvételére, | ||
- | |||
- | <code javascript src/ | ||
- | import { Component } from ' | ||
- | import { | ||
- | FormArray, | ||
- | FormBuilder, | ||
- | FormGroup, | ||
- | ReactiveFormsModule, | ||
- | Validators | ||
- | } from ' | ||
- | import { RouterOutlet } from ' | ||
- | |||
- | @Component({ | ||
- | selector: ' | ||
- | standalone: true, | ||
- | imports: [RouterOutlet, | ||
- | templateUrl: | ||
- | styleUrl: ' | ||
- | }) | ||
- | export class AppComponent { | ||
- | title = ' | ||
- | |||
- | employeeForm!: | ||
- | |||
- | constructor(private formBuilder: | ||
- | this.employeeForm = this.formBuilder.group({ | ||
- | name: ['', | ||
- | address: this.formBuilder.group({ | ||
- | city: '', | ||
- | street: '' | ||
- | }), | ||
- | salary: '', | ||
- | phones: this.formBuilder.array([]) | ||
- | }) | ||
- | } | ||
- | |||
- | onSubmit() { | ||
- | if(this.employeeForm.valid) { | ||
- | console.log(this.employeeForm.value); | ||
- | } | ||
- | } | ||
- | get phones(): FormArray { | ||
- | return this.employeeForm.get(' | ||
- | } | ||
- | |||
- | |||
- | addPhone() { | ||
- | this.phones.push(this.newPhone()); | ||
- | } | ||
- | |||
- | newPhone(): FormGroup { | ||
- | return this.formBuilder.group({ | ||
- | phone: '' | ||
- | }); | ||
- | } | ||
- | |||
- | removePhone(i: | ||
- | this.phones.removeAt(i); | ||
- | } | ||
- | |||
- | } | ||
- | |||
- | </ | ||
- | |||
- | ===== HTML Sablon ===== | ||
- | |||
- | A HTML sablonban a @for() direktívát használjuk, | ||
- | |||
- | <code javascript src/ | ||
- | <form [formGroup]=" | ||
- | (ngSubmit)=" | ||
- | |||
- | <div class=" | ||
- | <label for=" | ||
- | <input type=" | ||
- | placeholder=" | ||
- | </ | ||
- | |||
- | <div formGroupName=" | ||
- | <div class=" | ||
- | <label for=" | ||
- | <input type=" | ||
- | placeholder=" | ||
- | </ | ||
- | <div class=" | ||
- | <label for=" | ||
- | <input type=" | ||
- | placeholder=" | ||
- | </ | ||
- | </ | ||
- | |||
- | <div class=" | ||
- | <label for=" | ||
- | <input type=" | ||
- | placeholder=" | ||
- | </ | ||
- | |||
- | <div> | ||
- | <button type=" | ||
- | </ | ||
- | <div formArrayName=" | ||
- | @for (phone of phones.controls; | ||
- | <div formGroupName=" | ||
- | <label for=" | ||
- | <input type=" | ||
- | <button type=" | ||
- | </ | ||
- | } | ||
- | </ | ||
- | |||
- | <div> | ||
- | <button type=" | ||
- | Mehet | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | |||
- | </ | ||
- | |||
- | ===== Lehetséges eredmény ===== | ||
- | |||
- | Az adatokat ilyen formában kapjuk: | ||
- | |||
- | <code javascript> | ||
- | { | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | }, | ||
- | " | ||
- | " | ||
- | { | ||
- | " | ||
- | }, | ||
- | { | ||
- | " | ||
- | } | ||
- | ] | ||
- | } | ||
- | </ | ||
- | |||
- | ===== A telefonszám típusát is megadjuk ===== | ||
- | |||
- | Egészítsük ki az alkalmazásunkat úgy, hogy a telefonszám típusát is tárolni tudjuk. | ||
- | |||
- | Javítsuk a newPhone() metódust: | ||
- | |||
- | <code javascript> | ||
- | newPhone(): FormGroup { | ||
- | return this.formBuilder.group({ | ||
- | type: '', | ||
- | phone: '' | ||
- | }); | ||
- | } | ||
- | </ | ||
- | |||
- | Javítsuk a phones tömb részt: | ||
- | |||
- | <code html> | ||
- | <div formArrayName=" | ||
- | @for (phone of phones.controls; | ||
- | <div formGroupName=" | ||
- | <label for=" | ||
- | <input type=" | ||
- | <br> | ||
- | <label for=" | ||
- | <input type=" | ||
- | <button type=" | ||
- | |||
- | </ | ||
- | } | ||
- | </ | ||
- | </ | ||
- | |||
- | ===== Webes nézet CSS nélkül ===== | ||
- | |||
- | A következő képen láthatjuk működés közben az alkalmazást. | ||
- | |||
- | {{: | ||
- | |||
- | |||
- | ===== GitHub és demó ===== | ||
- | |||
- | * https:// | ||
- | * https:// | ||
- | |||
- | |||
oktatas/web/angular/angular_18_reaktiv_urlap_alcsoporttal_toembbel.1729832033.txt.gz · Utolsó módosítás: 2024/10/25 06:53 szerkesztette: admin