constant / value en Angular moderno
Una constante que nunca cambia pasa a ser un const exportado. Un valor que varía por ambiente o en pruebas pasa a ser un InjectionToken.
Antes · AngularJS
app.constant('API_URL', '/api/v2');
app.constant('PAGE_SIZES', [10, 25, 50]);
app.value('appConfig', { theme: 'light', locale: 'en' });
app.service('UserService', function ($http, API_URL) {
this.list = function () { return $http.get(API_URL + '/users'); };
});Después · Angular// plain constant: no DI needed
export const PAGE_SIZES = [10, 25, 50] as const;
// value that changes per environment or in tests
export const API_URL = new InjectionToken<string>('API_URL', {
providedIn: 'root',
factory: () => '/api/v2',
});
@Injectable({ providedIn: 'root' })
export class UserService {
private http = inject(HttpClient);
private apiUrl = inject(API_URL);
list() { return this.http.get<User[]>(`${this.apiUrl}/users`); }
}Qué cambia
- Los valores de app.constant se importan con módulos ES; no interviene la inyección.
- InjectionToken<T> le da al valor un tipo y una factory por defecto, y se puede sobrescribir con { provide: API_URL, useValue: ... }.
- Los objetos mutables de app.value que modifican varias partes de la app pasan a ser un servicio con signals.
Consejo de migración. La mayoría de las constantes de AngularJS vivían en la inyección de dependencias porque no había módulos ES de donde importarlas. Expórtalas como constantes simples y deja los tokens para los pocos valores que de verdad sobrescribes.
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