Angular bindings
Als er gebruik wordt gemaakt van Angular heeft deze methode de voorkeur. De Angular bindings bestaat uit een gegenereerde NgModule met Angular Componenten.
Zie de instructies voor HTML/CSS componenten en Web Components. Daarnaast:
npm install @dso-toolkit/angular
Signal Forms
Naast de klassieke ControlValueAccessor-integraties voor Selectable (ngModel en Reactive Forms)
ondersteunt @dso-toolkit/angular ook Angular's Signal Forms via de
[formField]-directive uit @angular/forms/signals. Dit is beschikbaar voor dso-date-picker,
dso-selectable[type=checkbox] en groepen dso-selectable[type=radio].
import { Component, signal } from "@angular/core";
import { FormField, form, required, validate } from "@angular/forms/signals";
import {
DsoDatePicker,
DsoDatePickerFieldControl,
DsoSelectable,
DsoSelectableCheckboxFieldControl,
} from "@dso-toolkit/angular";
@Component({
standalone: true,
imports: [DsoDatePicker, DsoSelectable, DsoDatePickerFieldControl, DsoSelectableCheckboxFieldControl, FormField],
template: `
<dso-date-picker
[formField]="myForm.datum"
[minDate]="minimumDate()"
[maxDate]="maximumDate()"
[(inputError)]="dateInputError"
/>
<dso-selectable type="checkbox" [formField]="myForm.akkoord" />
`,
})
export class ExampleComponent {
model = signal({ datum: "", akkoord: false });
minimumDate = signal("01-01-2024");
maximumDate = signal("31-12-2024");
dateInputError = signal<"required" | "min-range" | "max-range" | "invalid" | undefined>(undefined);
myForm = form(this.model, (path) => {
required(path.datum, { when: () => this.dateInputError() !== "invalid" });
validate(path.datum, ({ value }) =>
!value() && this.dateInputError() === "invalid" ? { kind: "invalid" } : undefined,
);
});
}
De adapter geeft de invoerfout uit dsoDateChange of dsoBlur door via inputError. Het
voorbeeld gebruikt dit signal om ongeldige invoer van een leeg verplicht veld te onderscheiden.
De when-voorwaarde voorkomt dat ongeldige invoer daarnaast ook een required-fout krijgt.
Valideer datumgrenzen zelf in het Signal Form met dezelfde minimumDate- en
maximumDate-signals; de adapter zet minDate en maxDate alleen door naar de Date Picker.
Wis dateInputError zelf bij programmatische resets van het formulier.
Zonder [formField] stel je datumgrenzen zoals voorheen in met min en max op de Date
Picker. Gebruik alleen bij een Date Picker met [formField] minDate en maxDate voor
datumgrenzen, niet min en max.
Angular Signal Forms gebruikt min en max zelf voor formuliergrenzen. Het type daarvan
verschilt tussen Angular 21 en 22; de adapter biedt daarom geen eigen min- of
max-input. Formuliergrenzen stellen geen datumgrens in; minDate en maxDate geven
datumstrings door aan de Date Picker.
<!-- Statische datumgrenzen -->
<dso-date-picker [formField]="myForm.datum" minDate="01-01-2024" maxDate="31-12-2024" />
<!-- Dynamische datumgrenzen -->
<dso-date-picker [formField]="myForm.datum" [minDate]="minimumDate()" [maxDate]="maximumDate()" />
Radio-Selectables
Plaats [formField] op een fieldset met dsoSelectableRadioGroup, niet op de afzonderlijke
radio's. De value van iedere dso-selectable is een vaste optiewaarde; de groepsdirective
beheert de veranderlijke formulierwaarde.
import { Component, signal } from "@angular/core";
import { FormField, form, required } from "@angular/forms/signals";
import { DsoSelectable, DsoSelectableRadioGroupFieldControl } from "@dso-toolkit/angular";
@Component({
standalone: true,
imports: [DsoSelectable, DsoSelectableRadioGroupFieldControl, FormField],
template: `
<fieldset dsoSelectableRadioGroup [formField]="myForm.keuze">
<legend>Maak een keuze</legend>
<dso-selectable type="radio" name="keuze" value="ja">Ja</dso-selectable>
<dso-selectable type="radio" name="keuze" value="nee">Nee</dso-selectable>
</fieldset>
`,
})
export class RadioGroupExampleComponent {
model = signal({ keuze: "ja" });
myForm = form(this.model, (path) => required(path.keuze));
}
Gebruik voor alle opties binnen de groep dezelfde name en geef iedere optie een unieke,
niet-lege value. Eén radio-optie is ook mogelijk. De groepsdirective synchroniseert de
geselecteerde optie met het formulier en zet disabled, required en invalid door; het
fieldset groepeert en labelt de opties. De browser blijft de toetsenbordbediening van de
radio's verzorgen.