{{ fullName() }}
`, }) export class UserProfile { firstName = input(); lastName = input(); // `fullName` no es parte de la API pública del componente, pero se usa en la plantilla. protected fullName = computed(() => `${this.firstName()} ${this.lastName()}`); } ``` ### Usa `readonly` para propiedades que no deben cambiar Marca propiedades de componentes y directivas inicializadas por Angular como `readonly`. Esto incluye propiedades inicializadas por `input`, `model`, `output`, y consultas. El modificador de acceso readonly asegura que el valor establecido por Angular no sea sobrescrito. ```ts @Component({/* ... */}) export class UserProfile { readonly userId = input(); readonly userSaved = output(); readonly userName = model(); } ``` Para componentes y directivas que usan las APIs basadas en decoradores `@Input`, `@Output`, y consultas, este consejo aplica a propiedades de salida y consultas, pero no a propiedades de entrada. ```ts @Component({/* ... */}) export class UserProfile { @Output() readonly userSaved = new EventEmitter