Radio supplies the value and label of one option. Place it inside RadioGroup: the group owns the selected value, form binding and keyboard behavior.
Radio itself has no value model or outputs. Its value is an input describing this option, not the current group selection. Use the group's valueChange to observe selection changes.
Bind FormField to the value-owning control and add required to the form schema. Select a destination, leave the field to mark it touched, and reset it to check both value and validation state. A required marker on its own does not validate your form.
Change the settings below and interact with the live control. The preview, current application value and generated template stay together. A disabled destination lets you check that unavailable choices cannot be selected.
Try and configure
Live preview
Radio represents one option. Its group owns the selected value and keyboard navigation.
These inputs require a model or function, not a checkbox. Edit the same-named field in the Source component and bind it in the template; data already used by this preview appears in the state above.
value ยท V
In Source: define value with this type and use [value]="value" (or value() for a signal).
Radio supplies the value and label of one option. Place it inside RadioGroup: the group owns the selected value, form binding and keyboard behavior.
Radio itself has no value model or outputs. Its value is an input describing this option, not the current group selection. Use the group's valueChange to observe selection changes.
Give the group an accessible name and each Radio a visible label. Test with Tab, arrow keys and Space. Keep option values distinct and avoid placing extra interactive controls inside a radio label.
Key
Action
Tab
Enters and leaves the radio group.
Arrow keys
Moves between enabled radio options.
Space
Selects the focused option when interaction is allowed.
The reference lists the public Inputs, models, Outputs and Templates from the pinned Core package. Click a named type to open its definition. Each applicable Template has an executable example and its actual source.
Inputs
Configure the component with [property]="value". Your application supplies these values; the component does not replace the state you pass in.
Name
Type
Default
Template binding
Description
disabled
boolean
false
[disabled]
Disables user interaction; disabled options cannot be selected.
Identifier of the native input for label and accessibility associations.
label
string
''
[label]
Visible label of this radio option.
value
V
Required
[value]
Option value selected by the surrounding RadioGroup.
Templates
ng-content projects content into the component. TemplateRef inputs receive a template; ng-template directives identify templates with a typed context. A directive shared by an entrypoint is not necessarily a slot of this component.
This component does not expose content projection or public customization templates.
Load Core styles once. Use the public tokens below for local customization or a preset for application-wide changes. Keep labels, focus, selected options and disabled states readable in both light and dark themes.
Specific tokens
This component uses shared theme tokens rather than dedicated component hooks.
Shared tokens used
Override these on a local wrapper to affect this example. An override on :root affects other components that use the same token.
Token
Purpose here
Other impact
Default / fallback
--neu-border-hover
Control borders on hover
Shared by other Core consumers; scope the override.
rgba(15, 23, 42, 0.16)
--neu-primary
Brand color for active controls and emphasis
Shared by other Core consumers; scope the override.
#007aff
--neu-surface
Main field, header or control surface
Shared by other Core consumers; scope the override.
#ffffff
--neu-text
Main text and inherited icon color
Shared by other Core consumers; scope the override.
#0f172a
--neu-font-sans
Text typography
Shared by other Core consumers; scope the override.