【问题标题】:Angular lazy routing ignoring parent pathAngular惰性路由忽略父路径
【发布时间】:2019-03-28 01:12:10
【问题描述】:

我正在使用 Angular 6.1,并尝试使用延迟路由设置应用程序模块和功能模块(称为实体模块)。我想创建一个路由 /entities/list,链接到我的实体模块中的一个组件。但我无法让这条路线工作。相反,当我导航到 /list 时,将显示该组件。为什么我的路由忽略了父“/entities”路径?

app.module.ts:

import {NgModule} from '@angular/core';
import {AppComponent} from './app.component';
import {AppRoutingModule} from './app-routing.module';
import {BrowserModule} from '@angular/platform-browser';
import {EntitiesModule} from './entities/entities.module';

@NgModule({
    bootstrap: [AppComponent],
    declarations: [AppComponent],
    imports: [AppRoutingModule, BrowserModule, EntitiesModule],
    providers: []
})

export class AppModule {}

app-routing.module.ts:

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

const routes: Routes = [
    {path: 'entities', loadChildren: './entities/entities.module#EntitiesModule'},
    {path: '', redirectTo: '', pathMatch: 'full'}
];

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

export class AppRoutingModule {}

app.component.ts:

import {Component} from '@angular/core';

@Component({
    selector: 'app-root',
    template: 'app <router-outlet></router-outlet>'
})

export class AppComponent {}

entities/entities.module.ts:

import {NgModule} from '@angular/core';
import {EntitiesRoutingModule} from './entities-routing.module';
import {EntitiesComponent} from './entities.component';

@NgModule({
    declarations: [EntitiesComponent],
    imports: [EntitiesRoutingModule]
})

export class EntitiesModule {}

entities/entities-routing.module.ts:

import {NgModule} from '@angular/core';
import {Routes, RouterModule} from '@angular/router';
import {EntitiesComponent} from './entities.component';

const routes: Routes = [
    {path: 'list', component: EntitiesComponent}
];

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

export class EntitiesRoutingModule {}

entities/entities.component.ts:

import {Component} from '@angular/core';

@Component({
    selector: 'app-entities',
    template: 'entities'
})

export class EntitiesComponent {}

我还尝试使用以下方法在实体模块中定义路由,但组件仍将显示为导航到 /list,而不是导航到 /entities/list

const routes: Routes = [
    {
        path: '', children: [
            {path: 'list', component: EntitiesComponent}
        ]
    }
];

我做错了什么?任何帮助表示赞赏!

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    您正在尝试进行延迟加载。但是,您正在进行预加载。

    app.module.ts这一行:

    导入:[AppRoutingModule, BrowserModule, EntitiesModule],

    正在加载实体模块。从那里删除它以进行延迟加载,它应该可以工作。

    【讨论】:

      【解决方案2】:

      由于您延迟加载模块但未初始化实体组件。您的 /entities/list 应该是实体组件的子组件

      你的实体/entities-routing.module.ts 应该是这样的

      const route: Routes = [
        { path: '', component: EntitiesComponent, children: [
        { path: 'list', component: EntitiesListComponent }, // here should be your /entities/list path which i think you haven't made any
        { path: 'xyz', component: XYZComponent }, // entities/xyz and so on...
        { path: '', redirectTo: 'list', pathMatch: 'full'}
       ]}
      ];
      

      【讨论】:

        【解决方案3】:

        尝试将延迟加载的模块作为子模块加载。

          {
            path: 'entities',
            children: [{
              path: '',
              loadChildren: './entities/entities.module#EntitiesModule'
            }]
          }
        

        【讨论】:

        • 效果很好,非常感谢!我接受了 Pankaj 的回答,因为它也解决了我的错误延迟加载问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-16
        相关资源
        最近更新 更多