#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