Aprende a configurar rutas en Angular 4 paso a paso: desde importar correctamente RouterModule.forRoot hasta crear los componentes detalle y lugares, organizar el layout con router-outlet y definir paths limpios para navegar por URL. Verás la convención de nombres, los cambios mínimos en el selector y templateUrl, y cómo mantener el navbar y el footer como estructura global.
¿Cómo configurar rutas en Angular con RouterModule?
Configurar rutas requiere dos acciones clave: importar RouterModule desde @angular/router e inicializar con forRoot usando una constante de rutas. Esto se agrega en imports del módulo principal y permite que la aplicación reconozca cada path y su component asociado.
¿Qué hace forRoot en la inicialización?
Registra las rutas de la app una sola vez en el módulo raíz.
Conecta el router con la configuración definida en la constante de rutas.
Habilita la navegación por URL sin recargar la página.
¿Cómo se definen paths y components?
Crea una constante, por ejemplo, appRoutes.
Asigna cada path a su component correspondiente.
Usa un path vacío para la vista inicial.
import{RouterModule,Routes}from'@angular/router';import{DetalleComponent}from'./detalle/detalle.component';import{LugaresComponent}from'./lugares/lugares.component';exportconst appRoutes:Routes=[{ path:'detalle', component:DetalleComponent},{ path:'lugares', component:LugaresComponent},{ path:'', component:LugaresComponent}];// en el módulo principal@NgModule({ imports:[RouterModule.forRoot(appRoutes)], declarations:[DetalleComponent,LugaresComponent]})exportclassAppModule{}
¿Cómo crear y registrar el componente detalle?
Se crea una carpeta llamada detalle y dentro dos archivos siguiendo la convención: detalle.component.ts y detalle.component.html. El primero define el selector y el templateUrl; se puede omitir styleUrls para mantener el componente mínimo.
¿Qué convención de nombres deben seguir los archivos?
Usa el patrón: nombre + .component + .ts o .html.
Ejemplo: detalle.component.ts y detalle.component.html.
La clase se nombra en PascalCase: DetalleComponent.
¿Qué cambios mínimos requiere el componente?
Cambiar el selector a app-detalle.
Apuntar el templateUrl a ./detalle.component.html.
¿Cómo se registra en el módulo y se agrega la ruta?
Añade DetalleComponent en declarations del módulo.
Agrega el path'detalle' apuntando a DetalleComponent en appRoutes.
Refresca y visita /detalle para validar la vista.
¿Cómo separar layout global y vistas con router-outlet?
Para que el layout general no se duplique, el navbar y el futuro footer viven en app.component.html, y las vistas específicas se cargan dentro de router-outlet. Así, al entrar a /detalle o /lugares, solo cambia el contenido central.
¿Dónde colocar router-outlet y el layout global?
Deja el navbar en app.component.html.
Inserta <router-outlet></router-outlet> debajo del navbar.
Nunca lo importó, simplemente apareció en un video posterior.
Recuerden que para que en lugares se vea el mapa otra vez tienen que agregar el archivo lugares.component.css y mudar los estilos que teniamos, ademas de llamarlo en el lugares.component.ts asi:
¡Ojo! cuando asignen una ruta, en el path de las rutas, no es lo mismo colocar " {path: ‘Lugares’, component: LugaresComponent}," y buscar en el navegador “” y viceversa, tienen que buscarla exactamente como escribieron la ruta en el Path, en resumen:
Todo lo que tienes dentro del ruter se va a mostrar dentro de esa directiva es como si a un div le pusiera codigo adentro en forma dinámica y cambia según la ruta o u r l en la que estés
Me parece que el profesor incurre en muy malas practicas, como copiarse la carpeta de un componente para crear otro! a esta altura del curso usa angular/cli, tirar componentes en la carpeta app??, crea una carpeta component, no quiero ser mala onda pero no esta bueno hasta aquí el curso, se pasan por alto muchas cosas, no tiene introducción a typescript que es basico saberlo para escribir nuestro código .ts.
RouterModule: Módulo de angular para inicializar el sistema de rutas recibiendo como parámetro las diferentes rutas definidas en el proyecto con la función "forRoot"
router-outlet: Etiqueta para colocar el contenido de las diferentes rutas en el html
puedes crear el componente por medio de cli de la siguiente manera:
a) ng generate component detalle
b) ng g component detalle
c) ng g c detalle
d) ng g c ruta/detalle -> si deseas que el componente se agregue en una ruta particular
Lo que hace que la etiqueta navbar este en todos los componentes, es ubicando exclusivamente la etiqueta <router-outlet> despues de la etiqueta nabvar o es otra razon por la cual esa etiqueta se encuentra en todos los componentes ?
Lo podés hacer de varias formas, una es tener un ngif en el Heather y el footer para evitar que se carguen si no está logueado, otra es tener un if en el app componentes que te redireccione al loguin si no está logueado
En la versión de angular 6.x me sale error cuando el profesor pone las etiquetas en el html:
<router-outlet></router-outlet>
Para solucionarlo, esto fue lo que hice:
En app.module.ts tengo:
import{BrowserModule}from'@angular/platform-browser';import{NgModule}from'@angular/core';import{AppComponent}from'./app.component';import{FormsModule}from"@angular/forms";import{AgmCoreModule}from'@agm/core';import{ResaltarDirective}from"./directives/resaltar.directive";import{ContarClicksDirective}from'./directives/contar-clicks.directive';import{RouterModule,Routes}from'@angular/router';//Ojo acáimport{DetalleComponent}from'./detalle/detalle.component';constappRoutes:Routes=[{path:' ',component:AppComponent},{path:'lugares',component:AppComponent},{path:'detalle',component:DetalleComponent},];@NgModule({declarations:[AppComponent,ResaltarDirective,ContarClicksDirective,DetalleComponent],imports:[BrowserModule,FormsModule,AgmCoreModule.forRoot({//MI API DE GOOGLE MAPSapiKey:'xxxxxxxxxxx'}),RouterModule.forRoot(appRoutes)//Ojo acá],providers:[],bootstrap:[AppComponent]})exportclassAppModule{}
Y ya al final actualice la pagina y ya me sale lo que puse en el html de detalle.