Невозможно направить детей в модуль ленивой загрузки

Я новичок в разработке angular 4. В одном из моих проектов я использую ленивую загрузку для маршрутизации. Модуль ленивой загрузки содержит дочерний компонент. Однако маршрутизация к дочернему компоненту всегда завершается с ошибкой.

 Error: Cannot match any routes. URL Segment: 'home/addGroup'

Не могли бы вы помочь, если я делаю что-то не так? Я пробовал всеми способами, но ни один из них не увенчался успехом.

Ниже мои модули и маршрутизация.

индекс.html:

<app-root></app-root>

приложение.модуль:

import { routes } from './app.routes';

@NgModule({
    declarations: [
        AppComponent,
        UserSignupComponent,
        UserLoginComponent,
    ],
    imports: [
        BrowserModule,
        routes,
        HttpModule,
        FormsModule
    ]
});

приложение.маршруты:

import { HomeModuleModule } from './home-module/home-module.module';

export const appRoutes: Routes = [

    { path: '', redirectTo: 'login', pathMatch: 'full' },
    { path: 'login', component: UserLoginComponent },
    {
        path: 'home', loadChildren: './home-module/home-module.module#HomeModuleModule'
    }
];

export const routes: ModuleWithProviders = RouterModule.forRoot(appRoutes);

приложение.component.html:

 <router-outlet></router-outlet>

домашний модуль:

import { routes } from './home.routes';

@NgModule({
    imports: [
        CommonModule,
        BrowserModule,
        routes,
        HttpModule,
        FormsModule
    ],

    declarations: [HomeComponent, AddGroupComponent, AddItemComponent],
    providers: [httpserviceClass, sharedserviceClass],
})

домашние.маршруты:

export const router: Routes = [
    { path: '', component: HomeComponent, pathMatch: 'full' },
    {
        path: 'home', component: HomeComponent,
        children: [
            { path: 'addItem/:groupName', component: AddItemComponent },
            { path: 'addGroup', component: AddGroupComponent },
        ]
    }
];

export const routes: ModuleWithProviders = RouterModule.forChild(router);

home.component.html:

<nav class="navbar navbar-default noMargin">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand" href="#">Budget</a>
    </div>
    <ul class="nav navbar-nav">
      <li> <a [routerLink]="['addGroup']"> addgroup </a>         </li>
    </ul>
  </div>
</nav>

<div>
 <router-outlet></router-outlet>
</div>

Дело в том, что я могу перенаправить на «домашний» компонент домашнего модуля из компонента входа в систему с помощью

"this.router.navigate(['дом']);"

Однако из домашнего компонента я не могу перейти к компоненту addGroup через

<a [routerLink]="['addGroup']"> addgroup </a>

Я что-то упускаю?


person Sreehari    schedule 05.01.2018    source источник
comment
Вы пытались удалить скобку из routerLink? Вот так: ‹a routerLink=addGroup›   -  person Toodoo    schedule 05.01.2018
comment
Да, я пробовал. Но был тот же результат. Ошибка: Не удается сопоставить ни одного маршрута. Сегмент URL: «home/addGroup»   -  person Sreehari    schedule 05.01.2018
comment
Попробуйте добавить полный путь к routerLink в HomeComponent - [routerLink]="['home', 'addGroup']"   -  person planet_hunter    schedule 05.01.2018
comment
@ManojChalode: я пропустил, чтобы сказать. Это работало таким образом. Но я увидел в нем 2 проблемы. 1. URL отображается как localhost:4200/home/home/addGroup. путь содержит «дом» 2 раза. Я чувствую, что это должно быть показано таким образом. Он должен отображаться как localhost:4200/home/addGroup. Это не? 2. Если у меня 10 routerLinks, я должен указывать "дом" на всех маршрутах без необходимости?   -  person Sreehari    schedule 05.01.2018


Ответы (1)


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

Здесь я должен упомянуть несколько моментов.

Я перенаправляюсь на homeModule, используя маршрут «home», как в app.routes.

{ path: 'home', loadChildren: './home-module/home-module.module#HomeModuleModule' }

И в home.routes я загружаю "HomeComponent" по умолчанию. Следовательно, маршрутизация к «HomeComponent» прошла успешно.

Если внимательно следить за home.routes,

export const router: Routes = [
{ path: '', component: HomeComponent, pathMatch: 'full' },
{
    path: 'home', component: HomeComponent,
    children: [
        { path: 'addItem/:groupName', component: AddItemComponent },
        { path: 'addGroup', component: AddGroupComponent },
    ]
}
];

он содержит отдельный «домашний» маршрут.

        path: 'home', component: HomeComponent

Поскольку этот другой «домашний» маршрут также содержит то же имя «дом» в «app.routes», это внесло много путаницы.

Есть два способа, которыми я могу быть исправлен.

1. Сначала, чтобы не запутаться, измените маршрут «домашний» в home.route на «приветственный».

         path: 'home', component: HomeComponent,

to

         path: 'welcome', component: HomeComponent, 

А теперь исправьте настоящую ошибку.

 { path: '', component: HomeComponent, pathMatch: 'full' } 

следует изменить на

 { path: '', redirectTo: 'welcome', pathMatch: 'full' } 

Это перенаправит на дом/приветствие при загрузке homeComponent. А когда вы нажимаете addGroup, происходит перенаправление на "/addGroup". Таким образом, результирующий путь будет «/home/welcome/addGroup».

  1. Второй способ — изменить маршруты в home.routes на

     export const router: Routes = [     
     { path: '', component: HomeComponent,
         children:[               
           {path: 'addItem/:groupName', component:AddItemComponent},
           {path: 'addGroup', component:AddGroupComponent}
         ]
      }
    ];
    

    В этом случае результирующий путь при маршрутизации в addGroup будет просто «/home/addGroup».

person Sreehari    schedule 05.01.2018