Passa al contenuto principale

input() e output()

Le funzioni input() e output() sono il modo consigliato per definire le proprietà di comunicazione tra componenti.

input() restituisce un Signal, integrando perfettamente con il sistema di reattività.

Input

import { input } from '@angular/core';

@Component({ ... })
export class UserCardComponent {
// Input opzionale con default
readonly showAvatar = input(true);

// Input obbligatorio
readonly user = input.required<User>();

// Input con alias
readonly label = input('', { alias: 'buttonLabel' });

// Input con transform
readonly size = input(0, { transform: numberAttribute });
}

Uso nel template

<app-user-card [user]="currentUser()" [showAvatar]="false" />

Reagire ai cambiamenti di input

Essendo un Signal, si compone naturalmente:

readonly userName = computed(() => this.user().name);

constructor() {
effect(() => {
console.log('User changed:', this.user());
});
}

Output

import { output } from '@angular/core';

@Component({ ... })
export class SearchComponent {
readonly searchChanged = output<string>();
readonly formSubmitted = output<void>();

onInput(value: string) {
this.searchChanged.emit(value);
}
}

Uso nel template del parent

<app-search (searchChanged)="handleSearch($event)" />

Model (two-way binding con Signal)

Per il two-way binding basato su Signal:

import { model } from '@angular/core';

@Component({ ... })
export class ToggleComponent {
readonly checked = model(false);

toggle() {
this.checked.update(v => !v);
}
}
<!-- Two-way binding -->
<app-toggle [(checked)]="isEnabled" />