Ошибка угловой маршрутизации: не удается сопоставить какие-либо маршруты

#angular #angular-routing #angular-router

#угловая #угловая маршрутизация #угловой-маршрутизатор

Вопрос:

Я пытаюсь реализовать отложенную загрузку в своем приложении angular. Я разделил свое приложение на два компонента; модуль аутентификации и домашний модуль. Я определил свои маршруты в app-routing.Module.ts следующим образом:

 import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
  { path: '', 
    redirectTo: '/authentication/signin', 
    pathMatch: 'full' 
  },
  {
    path: '',
    children: [
      {
        path: 'authentication',
        loadChildren: () => import('./modules/authentication/authentication.module').then(m => m.AuthenticationModule)
      },
      {
        path: 'home',
        loadChildren: () => import('./modules/home/home.module').then(m => m.HomeModule)
      }
    ]
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

 

Затем в модулях аутентификации, а также в домашних модулях я определил еще один набор маршрутов,

authentication.module.ts:

 import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { SignupComponent } from './signup/signup.component';
import { SigninComponent } from './signin/signin.component';
import { ForgotPasswordComponent } from './forgot-password/forgot-password.component';
import { SharedModule } from '../shared/shared.module';

export const authenticationRoutes = [
  {
    path: '',
    redirectTo: 'signup',
    pathMatch: 'full'
  },
  {
    path: 'signin',
    component: SigninComponent
  },
  {
    path: 'signup',
    component: SignupComponent
  },
  {
    path: 'forgot-password',
    component: ForgotPasswordComponent
  }
];

@NgModule({
  declarations: [
    SignupComponent,
    SigninComponent,
    ForgotPasswordComponent
  ],
  imports: [
    CommonModule,
    SharedModule,
    RouterModule.forChild(authenticationRoutes)
  ]
})
export class AuthenticationModule { }
 

home.module.ts:

 import { HomeComponent } from './home/home.component';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

export const authenticationRoutes = [
  {
    path: 'home',
    component: HomeComponent
  }
];

@NgModule({
  declarations: [],
  imports: [
    CommonModule
  ]
})
export class HomeModule { }
 

При этом всякий раз, когда я пытаюсь выполнить свой код, я ожидаю, что пустой URL перенаправит меня на регистрацию, однако независимо от того, указываю я маршрут или нет, я получаю ту же ошибку, которая гласит:

ОШИБКА Ошибка: не перехвачено (в обещании): Ошибка: не удается сопоставить какие-либо маршруты. Сегмент URL: ошибка аутентификации / входа: не удается сопоставить какие-либо маршруты. Сегмент URL: «аутентификация / вход’

Как мне исправить эту проблему?

Ответ №1:

У вас проблема в модуле app-routing. При проверке совпадающего пути оба пути пусты, и поскольку вы указали сначала перенаправление, когда путь пуст, приложение никогда не достигает никакого другого пути. Лучший способ — не указывать модули аутентификации и home в качестве дочерних и перенаправлять на аутентификацию при просмотре пути «аутентификация», как показано ниже

 import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
    {
        path: 'authentication',
        loadChildren: () => import('./modules/authentication/authentication.module').then(m => m.AuthenticationModule)
    },
    {
        path: 'home',
        loadChildren: () => import('./modules/home/home.module').then(m => m.HomeModule)
    },
    { 
        path: '**', //If path doesn't match anything reroute to /authentication/signin
        redirectTo: '/authentication/signin', 
        pathMatch: 'full' 
    },
];

@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
 

Комментарии:

1. Я почему-то все еще получаю ту же ошибку. Я не уверен, где я ошибаюсь.

2. Переместите код перенаправления на последний в модуле аутентификации, и вам не хватает RouterModule.forChild в модуле home