Carlos Cifuentes
Referencia AngularJS → Angular

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

¿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