ng-init en Angular moderno
ng-init desaparece. El estado inicial va en la clase del componente, y los alias de template usan @let.
Antes · AngularJS
<div ng-controller="ReportCtrl as vm"
ng-init="vm.load(2024); vm.tab = 'summary'">
<div ng-repeat="row in vm.rows" ng-init="rowTotal = row.qty * row.price">
{{ rowTotal }}
</div>
</div>Después · Angularexport class ReportComponent implements OnInit {
year = input(2024);
tab = signal<'summary' | 'detail'>('summary');
rows = signal<Row[]>([]);
ngOnInit() {
this.load(this.year());
}
}
<!-- template -->
@for (row of rows(); track row.id) {
@let rowTotal = row.qty * row.price;
<div>{{ rowTotal }}</div>
}Qué cambia
- Los valores iniciales pasan a ser inicializadores de campo; las llamadas que cargan datos van en el constructor, o en ngOnInit cuando dependen de inputs.
- Los alias creados con ng-init dentro de ng-repeat pasan a ser declaraciones @let (Angular 18.1 en adelante) o computed.
- Los valores que el servidor escribía en ng-init necesitan otro canal, como una llamada a la API o una etiqueta script con JSON que se lee al arrancar.
Consejo de migración. Busca ng-init en páginas renderizadas por el servidor (JSP, Razor, ERB, Blade). Ahí es donde el backend le pasa datos al frontend, y ese acoplamiento hay que reemplazarlo antes de mover la pantalla.
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