one-time binding (::) en Angular moderno
Angular no tiene sintaxis :: y no la necesita. Los bindings son código compilado sin lista de watchers, y OnPush con signals limita las revisiones a los componentes cuyos datos cambiaron.
Antes · AngularJS
<h1>{{ ::vm.title }}</h1>
<ul>
<li ng-repeat="c in ::vm.countries">{{ ::c.name }}</li>
</ul>
<span ng-class="::{ premium: vm.user.premium }">{{ ::vm.user.plan }}</span>Después · Angular@Component({
selector: 'app-country-list',
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<h1>{{ title() }}</h1>
@for (c of countries(); track c.id) {
<li>{{ c.name }}</li>
}
`,
})
export class CountryListComponent {
title = input.required<string>();
countries = input.required<Country[]>();
}Qué cambia
- Quita el prefijo ::; el binding queda igual.
- ChangeDetectionStrategy.OnPush omite un componente hasta que cambia un input, se dispara un evento dentro de él o cambia un signal que lee.
- Las listas estáticas renderizadas con @for y una expresión track no se vuelven a crear si nada cambió.
Consejo de migración. Busca los lugares donde :: se usó a propósito para congelar un valor mientras el modelo seguía cambiando. Esos necesitan una copia explícita tomada una vez en el componente, porque un binding normal ahora sí se actualiza.
Relacionado
- ng-change / ng-blur / ng-keyup
- ng-disabled / ng-readonly / ng-checked
- ng-src / ng-href / ng-srcset
- ngMessages
¿Planeas una migración o una plataforma de microfrontends?
En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.
Escríbeme por LinkedIn