Детская маршрутизация не работает, и приложение перенаправляет на страницу 404

Я создал угловое приложение версии 7, и структура проекта такая. у модуля приложения есть app-routing.module.ts, а у модуля панели инструментов есть панель управления module.ts. В модуле панели мониторинга маршрут компонента макета имеет дочерние компоненты, а именно домашний и административный.

Вот мой код:

Модуль приложения

import { AppRoutingModule } from './app-routing.module';
import { DashboardModule } from './dashboard/dashboard.module';

import { AppComponent } from './app.component';
import { LoginComponent } from './login/login.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';


@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    PageNotFoundComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    DashboardModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Модуль маршрутизации приложений:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';

const routes: Routes = [
  { path: 'login', component: LoginComponent },
  { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
  { path: '**', component: PageNotFoundComponent }
];

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

файл модуля панели мониторинга:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LayoutComponent } from './layout/layout.component';
import { HomeComponent } from './home/home.component';
import { AdminComponent } from './admin/admin.component';
import { DashboardRoutingModule } from './dashboard-routing.module';

@NgModule({
  declarations: [LayoutComponent, HomeComponent, AdminComponent],
  imports: [
    CommonModule,
    DashboardRoutingModule
  ]
})
export class DashboardModule { }

модуль маршрутизации информационной панели.

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

import { LayoutComponent } from './layout/layout.component';
import { HomeComponent } from './home/home.component';
import { AdminComponent } from './admin/admin.component';


const dashboardRoutes: Routes = [
  {
    path: 'dashboard',
    component: LayoutComponent,
    children: [
      { path: '', redirectTo: 'home', pathMatch: 'full' },
      { path: 'home', component: HomeComponent },
      { path: 'admin', component: AdminComponent}
    ]
  }
];

@NgModule({
  declarations: [],
  imports: [
    CommonModule,
    RouterModule.forChild(dashboardRoutes)
  ],
  exports: [RouterModule]
})
export class DashboardRoutingModule { }

Проблема в том, что я хочу перейти к макету панели инструментов на локальном хосте: 4200, но он всегда идет по маршруту компонента pageNotFound на каждом маршруте. Может ли кто-нибудь указать, в чем проблема.

Код на StackBlitz:

https://stackblitz.com/github/Ahsan9981/authGuardApp

Желаемый результат введите здесь описание изображения


person Ahsan    schedule 10.12.2018    source источник
comment
Вы добавляете approuting перед модулем панели инструментов, поэтому маршрут 404 будет первым, и, следовательно, будет выполняться переход до ненайденной страницы. Вам нужно изменить последовательность импорта. Важно, в каком порядке вы импортируете.   -  person ChrisEenberg    schedule 10.12.2018
comment
@ChrisEenberg, это сработало. Можете ли вы объяснить это подробнее, чтобы я мог полностью понять это?   -  person Ahsan    schedule 10.12.2018
comment
@ChrisEenberg, не могли бы вы добавить это как ответ на этот вопрос?   -  person Ahsan    schedule 10.12.2018


Ответы (1)


Маршрутизатор будет соответствовать вашим маршрутам в той последовательности, в которой вы их импортируете, поэтому, если вы добавите подстановочный знак /** для соответствия всем маршрутам в начале вашего модуля приложения, он будет соответствовать этому маршруту, прежде чем проверять, соответствуют ли ему какие-либо другие ваши маршруты. .

Чтобы расширить пример: маршрутизатор будет проходить по всем определенным маршрутам, пока не найдет совпадение, если вы начнете с перехвата всех, он остановится на этом и не пойдет дальше. Поэтому будет проблемой определить все в начале вашего модуля (appRoutes).

Ваш модуль панели мониторинга импортирует маршруты панели мониторинга, поэтому импорт модуля панели мониторинга в модуль приложения будет определять, когда будут импортированы маршруты панели мониторинга.

Вам нужно импортировать свои маршруты в той последовательности, которая, по вашему мнению, будет соответствовать, и оставить подстановочные знаки для добавления в последнюю очередь. Это всегда должен быть запасной вариант с подстановочными знаками.

Об этом есть отличный раздел в документации по маршрутизации.

Если есть еще что-то неясное, не стесняйтесь комментировать, и я соответствующим образом обновлю свой ответ.

С уважением Крис

person ChrisEenberg    schedule 10.12.2018