ui-router / ngRoute en Angular moderno
Los estados pasan a ser rutas. El Router de Angular agrega carga diferida por ruta y, con withComponentInputBinding(), entrega los datos de la ruta directo a los inputs del componente.
Antes · AngularJS
$stateProvider
.state('users', { url: '/users', component: 'userList' })
.state('userDetail', {
url: '/users/:id',
component: 'userDetail',
resolve: {
user: function (UserService, $transition$) {
return UserService.get($transition$.params().id);
}
}
});Después · Angularexport const routes: Routes = [
{
path: 'users',
loadComponent: () => import('./user-list.component').then(m => m.UserListComponent),
},
{
path: 'users/:id',
loadComponent: () => import('./user-detail.component').then(m => m.UserDetailComponent),
resolve: {
user: (route: ActivatedRouteSnapshot) =>
inject(UserService).get(route.paramMap.get('id')!),
},
},
];Qué cambia
- Los nombres de estado desaparecen: la navegación usa rutas de URL con routerLink o Router.navigate.
- resolve funciona igual, escrito como una función que usa inject().
- ui-view pasa a ser router-outlet; los estados anidados pasan a ser rutas hijas.
Consejo de migración. En una app híbrida conviven los dos routers. Dale un solo dueño a cada URL y agrega una ruta comodín que entregue las URL desconocidas al router legacy.
Relacionado
- $stateChangeStart / transition hooks
- $timeout / $apply / $digest
- ng-transclude
- services, factories and providers
¿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