es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Angular no puede cargar otras rutas.

Intentando crear una aplicación web utilizando Angular 11, encontré un problema de enrutamiento:
Cuando navego desde la ruta inicial (

{ path: '', component: HomeComponent }

) a otras rutas, todo funciona como se espera, pero cuando intento navegar por el sitio web desde otra ruta, el enrutador me redirecciona a la ruta inicial.
No puedo enviar un enlace desde mi aplicación web (que no sea ”) a otra persona, debido a que el enrutador redirige a la ruta de inicio (home).

Ejemplo:

const routes : Routes = [
  { path: '', component: HomeComponent },
  { path: 'product/:id', component: ProductComponent }
];

Desde https://localhost:4200, cuando accedo a https://localhost:4200/product/14 funciona bien,
pero cuando intento acceder directamente a https://localhost:4200/product/14 seré redirigido a https://localhost:4200.

¿Cómo puedo configurar mi aplicación de Angular para que acepte cualquier ruta inicial?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de ser redirigido a la ruta de inicio al acceder a un enlace de URL directo a un componente en una aplicación web de Angular 11, es necesario utilizar HashLocationStrategy.

    Para hacer esto, es necesario importar HashLocationStrategy y LocationStrategy de ‘@angular/common’ en su archivo app.module.ts y proporcionarlos como proveedores en el mismo archivo.

    Ejemplo:

    import { NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { RouterModule, Routes } from '@angular/router';
    import { HashLocationStrategy, LocationStrategy } from '@angular/common';
    
    import { AppComponent } from './app.component';
    import { HomeComponent } from './home/home.component';
    import { ProductComponent } from './product/product.component';
    
    const routes : Routes = [
      { path: '', component: HomeComponent },
      { path: 'product/:id', component: ProductComponent }
    ];
    
    @NgModule({
      declarations: [
        AppComponent,
        HomeComponent,
        ProductComponent
      ],
      imports: [
        BrowserModule,
        RouterModule.forRoot(routes)
      ],
      providers: [
        { provide: LocationStrategy, useClass: HashLocationStrategy }
      ],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

    Al usar HashLocationStrategy, cuando se navega a un enlace de URL directo, Angular sabrá usar el símbolo de hash en la URL para identificar la ruta del componente en lugar de intentar identificarlo sin el símbolo, lo que causaba la redirección.

    En el ejemplo anterior, al acceder a https://localhost:4200/product/14 directamente, ahora mostrará el ProductComponent en lugar de redirigir a la ruta de inicio.

Comments are closed.