Angular 8 ленивых маршрутов разрешается с префиксом и без него и перенаправляет перед родителем

Я пытаюсь работать с роутером и ленивой загрузкой в ​​angular 8. Ранее я успешно использовал его в Angular 7.
У меня есть несколько основных маршрутов, которые заключаются в следующем:

/home
/auth
/auth/login
/auth/signUp

Я хотел бы /auth перенаправить на /auth/login и все остальное, чтобы перенаправить на /home,
Для этого мой app-routing.module.ts выглядит так:

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

И мой auth-routing.module.ts выглядит так:

const routes: Routes = [
  {
    path: '',
    redirectTo: '/auth/login',
    pathMatch: 'full'
  },
  {
    path: 'login',
    component: LoginComponent
  },
  {
    path: 'signUp',
    component: LogoutComponent
  }
];

Проблема в том, что он всегда перенаправляет на страницу авторизации и игнорирует другие перенаправления. /login а также /signUp пути также доступны на корневом уровне, что является странным, но они также работают, если с префиксом /auth/login что еще более своеобразно.

Так что почему-то маршруты, кажется, существуют дважды.
Кроме того, когда я префикс пути в auth-routing.module.ts с участием auth/ вдруг можно направить на /auth/auth/login

Я активировал все необходимые функции Angular 8, чтобы заставить плющ и ленивую загрузку работать. Другие маршруты и ленивые модули, которые я определил, работают.

1 ответ

Вы должны использовать относительные перенаправления как это:

приложение-routing.module.ts

import {NgModule} from '@angular/core';
import {Route, RouterModule} from '@angular/router';
const routes: Route[] = [
  {
    path: '',
    redirectTo: 'home',
    pathMatch: 'full'
  },
  {
    path: 'auth',
    loadChildren: () => import('./modules/auth/auth.module').then(m => m.AuthModule)
  },
  {
    path: 'home',
    loadChildren: () => import('./modules/home/home.module').then(m => m.HomeModule)
  },
  {
    path: '**',
    redirectTo: 'home',
    pathMatch: 'full'
  }
];

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

Auth-routing.module.ts

import {NgModule} from '@angular/core';
import {Route, RouterModule} from '@angular/router';
import { LoginComponent } from './login.component';

import { LogoutComponent } from './logout.component';
const routes: Route[] = [
  {
    path: '',
    redirectTo: 'login',
    pathMatch: 'full'
  },
  {
    path: 'login',
    component: LoginComponent
  },
  {
    path: 'signUp',
    component: LogoutComponent
  }
];

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

дом-routing.module.ts

import {NgModule} from '@angular/core';
import {Route, RouterModule} from '@angular/router';
import { HomeComponent } from './home.component';
const routes: Route[] = [
  {
    path: '',
    component: HomeComponent
  }
];

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

См. https://stackblitz.com/edit/angular-gmsgn2 для рабочего примера.

Убедитесь, что у вас есть импорт AuthModule, а также HomeModule только в app-routing.module.ts(как ленивая загрузка). Убедитесь, что эти модули не импортированы внутрьapp.module.ts как обычно (без ленивой загрузки).

Другие вопросы по тегам