Carlos Cifuentes
Referencia AngularJS → Angular

ng-options en Angular moderno

El mini-lenguaje de ng-options desaparece. Escribes los elementos option con @for y conectas el select a un control de formulario.

Antes · AngularJS
<select ng-model="vm.countryId"
        ng-options="c.id as c.name for c in vm.countries">
  <option value="">Select a country</option>
</select>
Después · Angular
// component
countries = input.required<Country[]>();
countryId = new FormControl<number | null>(null);

<!-- template -->
<select [formControl]="countryId">
  <option [ngValue]="null">Select a country</option>
  @for (c of countries(); track c.id) {
    <option [ngValue]="c.id">{{ c.name }}</option>
  }
</select>

Qué cambia

  • 'c.id as c.name for c in list' pasa a ser un option con [ngValue] y texto interpolado.
  • [ngValue] conserva el tipo real (número, objeto); [value] siempre produce un string.
  • group by pasa a ser elementos optgroup con un @for anidado.

Consejo de migración. Cuando los valores de las opciones son objetos, define [compareWith] en el select. Angular compara por identidad por defecto, el mismo problema que track by resolvía en ng-options.

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