Невозможно реализовать маршрутизацию в подмодулях, созданных в модуле приложения - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь реализовать маршрутизацию в подмодулях, кроме модуля маршрутизации, созданного в модуле приложения.

Я создал три подмодуля в модуле приложения, а именно модули входа, дома и администратора, и создал основной модуль маршрутизации в папке приложения для навигации между подмодулями входа, дома и администратора

Я также создал три компонента в домашнем модуле, а именно HomeComponent, CreateAlertsComponent и UpdateAlertsComponent и модуль маршрутизации с именем routeHome.module.ts для навигации между домашними компонентами.

Я могу выполнить маршрутизацию между подмодулями с помощью routing-module.ts, но не могу выполнить маршрутизацию между компонентами, созданными в домашнем модуле.

Я получаю сообщение об ошибке, как показано ниже

ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'Home/home/Alerts/create-alerts'
Error: Cannot match any routes. URL Segment: 'Home/home/Alerts/create-alerts'
    at ApplyRedirects.noMatchError (router.js:1765)
    at CatchSubscriber.eval [as selector] (router.js:1730)
    at CatchSubscriber.error (catchError.js:105)
    at MapSubscriber.Subscriber._error (Subscriber.js:134)
    at MapSubscriber.Subscriber.error (Subscriber.js:108)
    at MapSubscriber.Subscriber._error (Subscriber.js:134)
    at MapSubscriber.Subscriber.error (Subscriber.js:108)
    at MapSubscriber.Subscriber._error (Subscriber.js:134)
    at MapSubscriber.Subscriber.error (Subscriber.js:108)
    at LastSubscriber.Subscriber._error (Subscriber.js:134)
    at ApplyRedirects.noMatchError (router.js:1765)
    at CatchSubscriber.eval [as selector] (router.js:1730)
    at CatchSubscriber.error (catchError.js:105)
    at MapSubscriber.Subscriber._error (Subscriber.js:134)
    at MapSubscriber.Subscriber.error (Subscriber.js:108)
    at MapSubscriber.Subscriber._error (Subscriber.js:134)
    at MapSubscriber.Subscriber.error (Subscriber.js:108)
    at MapSubscriber.Subscriber._error (Subscriber.js:134)
    at MapSubscriber.Subscriber.error (Subscriber.js:108)
    at LastSubscriber.Subscriber._error (Subscriber.js:134)
    at resolvePromise (zone.js:814)
    at resolvePromise (zone.js:771)
    at eval (zone.js:873)
    at ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:4751)
    at ZoneDelegate.invokeTask (zone.js:420)
    at Zone.runTask (zone.js:188)
    at drainMicroTaskQueue (zone.js:595)
    at ZoneTask.invokeTask [as invoke] (zone.js:500)
    at invokeTask (zone.js:1540)

Ниже показана моя структура каталогов с созданными подмодулями admin, home, login.

enter image description here

Ниже показана моя структура каталогов с компонентами и routeHome.module.ts в home подмодуле

enter image description here

Пожалуйста, введите мой код здесь stackblitz

Может ли какой-либо орган помочь решить эти конфликты маршрутизации ...?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Поскольку вы разбили свое приложение на модули. Я бы предложил вам использовать Функция угловой ленивой загрузки Модули . Функциональный модуль в вашем случае HomeModule должен быть подключен до RoutingModule, чтобы маршрутизатор знал об этом.

Обновил ваш код ЗДЕСЬ .

В RoutingModule обновите массив маршрутов следующим образом:

const routes: Routes = [
  { path:'Login/login', component: LoginComponent },
  { path:'Home', loadChildren: "./home/home.module#HomeModule" },
  { path:'Admin/admin', component: AdminComponent },
];

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

Настройте маршруты HomeModule, обновив RouteHomeModule как:

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

import { CreateAlertsComponent } from './Alerts/create-alerts/create-alerts.component';
import { UpdateAlertsComponent } from './Alerts/update-alerts/update-alerts.component';
import { HomeComponent } from './home/home.component';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'Alerts/create-alerts', component: CreateAlertsComponent },
  { path: 'Alerts/update-alerts', component: UpdateAlertsComponent },
];

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

export class RouteHomeModule { }

Обратите внимание, что в загруженных модулями Lazy следует использовать RouterModule.forChild() вместо RouterModule.forRoot().

Наконец, удалите HomeComponent, CreateAlertsComponent и UpdateAlertsComponent из объявлений AppModule, поскольку эти компоненты являются частью HomeModule, и обновите routerLink в app.component.html. В AppModule:

@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    AdminComponent,
  ],
  ...

app.component.html

<button mat-raised-button
  routerLink='Home' 
  routerLinkActive="active">
  Home
</button>
0 голосов
/ 31 августа 2018

Вы можете использовать дочерние маршруты для навигации по вашему приложению:

{
  path:'Home/home',
  component: HomeComponent,
  children: [
    {
      path: 'Alerts/create-alerts',
      component: CreateAlertsComponent,
    },
  ],
},

Вы также можете взглянуть на https://angular.io/guide/router#child-routing-component, чтобы увидеть больше примеров.

edit: также добавьте <router-outlet></router-outlet> в файл home.component.html, чтобы отобразить ваш дочерний компонент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...