Carlos Cifuentes
Referencia AngularJS → Angular

$location en Angular moderno

$location se divide en dos: el Router para la navegación y los parámetros de ruta, y el servicio Location para operaciones de bajo nivel sobre la URL y el historial.

Antes · AngularJS
vm.page = $location.search().page || 1;

vm.goToUser = function (id) {
  $location.path('/users/' + id).search({ tab: 'orders' });
};

vm.back = function () { $window.history.back(); };
Después · Angular
private router = inject(Router);
private location = inject(Location);
private route = inject(ActivatedRoute);

page = toSignal(
  this.route.queryParamMap.pipe(map(p => Number(p.get('page') ?? 1))),
  { initialValue: 1 },
);

goToUser(id: number) {
  this.router.navigate(['/users', id], { queryParams: { tab: 'orders' } });
}

back() { this.location.back(); }

Qué cambia

  • $location.path() y $location.url() como setters pasan a ser Router.navigate o Router.navigateByUrl.
  • $location.search() pasa a ser ActivatedRoute.queryParamMap, o inputs del componente cuando el router usa withComponentInputBinding().
  • html5Mode(true) es el comportamiento por defecto; las URL con hash necesitan withHashLocation() en provideRouter.

Consejo de migración. En una app híbrida ambos frameworks observan la URL. El paquete @angular/common/upgrade ofrece un reemplazo de $location respaldado por el Location de Angular, que mantiene a los dos sincronizados.

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