Inputs
Each component can forward data to its children through inputs.
How to define component inputs?โ
Since Angular 17.1, components can define their input using the input() function.
import { input } from '@angular/core';
@Component({...})
class Rating {
readonly rating = input<number>();
}
input() returns a readonly signal that can only be set from the parent component.
These inputs are optional, and their default value is undefined except if provided like this:
@Component({...})
class Rating {
readonly rating = input(5);
}
How to make them required?โ
Sometimes, you want to make an input required. For example, you want the parent component to necessarily provide a rating.
In that case, you have to use input.required():
@Component({...})
class Rating {
readonly rating = input.required<number>();
}
How to forward data to a child component?โ
Parent components forward data to children using property binding:
@Component({
template: `<mc-rating [rating]="rating()" />`,
})
class CookbookPreview {
readonly rating = signal(3);
}
How to migrate legacy @Input()?โ
Before input(), components defined their inputs using the @Input() decorator.
@Component({...})
class Rating {
@Input() rating: number;
}
You can automatically migrate your legacy @Input() to input() using the Angular CLI signal-input-migration generator:
nx g @angular/core:signal-input-migration
# or if you are using the Angular CLI
ng g @angular/core:signal-input-migration
