0

我正在努力创建延迟加载的模块尽管我付出了所有努力,但我认为我在这里遗漏了一些东西,因为我无法按需加载模块。

我的项目结构如下:

项目结构截图

app
 -users
  -homeComponent
  -signupComponent 
  -users.routing.module.ts
  -users.module.ts
 -list
  -createListComponent
  -dashboardComponent 
  -list.routing.module.ts
  -list.module.ts

用户路由.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { SignupComponent } from './signup/signup.component';

const routes: Routes = [
  {
    path: "",
    component: HomeComponent
  },
  {
    path: "/signup",
    component: SignupComponent
  }

];

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

应用程序路由.module.ts

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

const routes: Routes = [
  {
    path: 'signup',
    loadChildren: './app/users/users.module#UsersModule',
  },
];

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

我在我的 loadChildren 标记中添加了相对路径,但我仍然收到一条错误消息,提示“无法加载模块”。我尝试过不同的网站,但我觉得我在这里缺少一个基本部分。

错误截图

任何帮助,将不胜感激。

4

4 回答 4

1

延迟加载语法现在使用 promise / observable,试试这个:

const routes: Routes = [
  {
    path: 'signup',
    loadChildren: () => import('./app/users/users.module').then(u => u.UsersModule)
  },
];

于 2020-08-31T05:35:00.510 回答
1
  1. 在用户模块中添加用户组件。
  2. 添加用户组件将是加载其他子组件的容器。
  3. 添加<router-outlet></router-outlet>应用组件组件

在此处输入图像描述

用户路由.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { SignupComponent } from './signup/signup.component';
import { UsersComponent } from './users.component';

const routes: Routes = [
  {
    path: '',
    component: UsersComponent, // will be bootstrap component for users module
    children: [ // will children for user module
      {
        path: 'signup',
        component: SignupComponent,
      },
      {
        path: 'home',
        component: HomeComponent,
      },
    ]
  }
];

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

这是工作演示https://stackblitz.com/edit/angular-ivy-j6wtlk

于 2020-08-31T09:13:15.160 回答
0

我认为您的路由配置有问题。

const routes: Routes = [
  {
    path: "",
    component: HomeComponent
  },
  {
    path: "/signup",
    component: SignupComponent
  }

];

使用这样的配置,永远不会SignupComponent到达路由对象,因为 Angular 路由器将遍历配置数组,直到找到第一个匹配项(以 DFS 方式),并且由于每个可能的路由都匹配,它将从那里搜索。""

我认为你可以做的是添加pathMatch: 'full'选项:

const routes: Routes = [
  {
    path: "",
    component: HomeComponent,
    pathMatch: 'full',

  },
  {
    path: "/signup",
    component: SignupComponent
  }

];

您还可以做的是添加HomeComponent路由,按原样添加数组的末尾。

于 2020-08-31T09:35:43.753 回答
0

stackblitz中的工作代码

只需进行如下更改,因为延迟加载的模块不再需要路径值,因此可以留空

// users-routing.module.ts
const routes: Routes = [
  {
    path: '', // leave blank
    component: SignupComponent,
  },
];
<!-- app.component.html -->
<p> home works</p>
<router-outlet></router-outlet>
于 2020-08-31T09:53:49.047 回答