import { Component } from '@angular/core';
import {
FormArray,
FormBuilder,
FormGroup,
ReactiveFormsModule,
Validators
} from '@angular/forms';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-root',
standalone: true,
imports: [RouterOutlet, ReactiveFormsModule],
templateUrl: './app.component.html',
styleUrl: './app.component.scss'
})
export class AppComponent {
title = 'app01';
employeeForm!: FormGroup;
constructor(private formBuilder: FormBuilder) {
this.employeeForm = this.formBuilder.group({
name: ['', Validators.required],
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('phones') as FormArray;
}
addPhone() {
this.phones.push(this.newPhone());
}
newPhone(): FormGroup {
return this.formBuilder.group({
phone: ''
});
}
removePhone(i: number) {
this.phones.removeAt(i);
}
}
===== HTML Sablon =====
A HTML sablonban a @for() direktívát használjuk, ami az Angular 17-ben jelent meg.
===== Lehetséges eredmény =====
Az adatokat ilyen formában kapjuk:
{
"name": "Csontos Ernő",
"address": {
"city": "Szeged",
"street": "Tél utca 7"
},
"salary": "398",
"phones": [
{
"phone": "(30) 894-2348"
},
{
"phone": "(70) 834-2483"
}
]
}
===== 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:
newPhone(): FormGroup {
return this.formBuilder.group({
type: '',
phone: ''
});
}
Javítsuk a phones tömb részt:
@for (phone of phones.controls; track phone; let i = $index) {
}
===== Webes nézet CSS nélkül =====
A következő képen láthatjuk működés közben az alkalmazást.
{{:oktatas:web:angular:alcsoport_tomb_minta_bongeszoben.png|}}
===== GitHub és demó =====
* https://github.com/oktat/exUrlapvariaco.git
* https://szit.hu/m/exUrlapvariacio