Questions:
Run Command:
For at starte applikationen:
ng serve -o
At håndtere brugerinput er en af de vigtigste dele af en webapplikation. Angular tilbyder to måder at håndtere forms på: template-driven forms og reactive forms.
Valget mellem de to afhænger af use-casen:
Template-driven forms oprettes med direktiver direkte i HTML-skabelonen. Formularvalidering og datahåndtering sker også i template, og data sendes til komponentklassen ved indsendelse OnSubmit.
<form>-elementet via FormsModule.Eksempel:
src/app/template-driven/template-driven.component.html<form #f="ngForm">
src/app/app.module.tsFormsModule:
import { FormsModule } from '@angular/forms';
Validering og datahåndtering udføres med ngModel:
src/app/template-driven/template-driven.component.html<input name="username" ngModel required>
Når brugeren klikker på “Submit”, kaldes onSubmit()-metoden i komponentklassen:
src/app/template-driven/template-driven.component.tsonSubmit(form: NgForm) {
console.log(form.value);
}
Reactive forms bruger en model-driven tilgang, hvor formularens logik defineres i komponentklassen. De tilbyder synkron adgang til data, immutabilitet og tracking via observables.
Eksempel:
src/app/reactive/reactive.component.tsFormBuilder:
constructor(private fb: FormBuilder) {
this.profileForm = this.fb.group({
firstName: [''],
lastName: [''],
address: this.fb.group({
street: [''],
city: [''],
state: [''],
zip: ['']
})
});
}
Validering: Reactive forms giver mulighed for at bruge funktioner til validering:
firstName: ['', Validators.required]
| Egenskab | Template-driven Forms | Reactive Forms |
|---|---|---|
| Form Model | Implicit via direktiver | Eksplicit i komponent |
| Data Model | Ustruktureret og mutabel | Struktureret og immutabel |
| Data Flow | Asynkron | Synkron |
| Validering | Direktiver | Funktioner |
Angular tilbyder testværktøjer i @angular/core/testing. Det centrale værktøj er TestBed, som bruges til at konfigurere og teste Angular-komponenter og services.
Eksempel:
src/app/app.component.spec.ts
it('should create the app', () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance;
expect(app).toBeTruthy();
});
Debugging:
Komponenten kan testes gennem ComponentFixture, som giver adgang til DOM-elementet og ændringsdetektering.
CI-tests kan køres ved hjælp af Karma (test runner) og Jasmine (test framework). Karma konfigureres i karma.conf.js.
Man kan også integrere tests via workflow actions på github:

Eksempel:
Test CI-output:
Coverage-rapport:

GitHub Actions Workflow: