【问题标题】:Angular loadChildren property absolute path to module is not working模块的角度 loadChildren 属性绝对路径不起作用
【发布时间】:2018-08-12 19:28:10
【问题描述】:

我正在尝试从我的 app-routing.module.ts 延迟加载一个模块,它的唯一工作方式是我使用相对路径,例如:

{ path: 'admin', loadChildren: './admin/admin.module#AdminModule', canLoad: [AuthGuard] },

如果我执行以下操作,它会失败并显示:ERROR in could not resolve module app/admin/admin.module relative to /C/projects/my-app/src/app/app-routing.module.ts:

{ path: 'admin', loadChildren: 'app/admin/admin.module#AdminModule', canLoad: [AuthGuard] }

在后来的 Angular 版本中,这条路径必须是相对的而不是绝对的,有什么变化吗?为什么它在他们的演示中起作用: https://stackblitz.com/angular/moybyqrjdeom

在 Angular 文档中它说如下:

地址是 AdminModule 文件位置(相对于应用根目录),后跟 # 分隔符,后跟导出模块类的名称 AdminModule。

【问题讨论】:

  • 我遇到了同样的问题,只能使用相对路径。
  • 是的,这在 Angular 6 中发生了变化,在 Angular 5 中 app/... 为我工作,但它在 Angular 6 中停止工作。它与更新的 tsconfig 有关。
  • 看起来像 ng update"baseUrl": "./" 添加到 tsconfig.json,如果您走这条路线到达 ng 6。而且,最新的 CLI 将其包含在默认为基础 tsconfig.json。所以,这就行了。

标签: angular typescript


【解决方案1】:

构建基于您的 tsconfig。如果您使用的是 CLI 生成的 Angular 应用程序,那么您应该有两个配置。

在你的路由中尝试这样做:

{ path: 'admin', loadChildren: 'src/app/admin/admin.module#AdminModule', canLoad: [AuthGuard] }

如果你 app/tsconfig 只是在根上扩展 tsconfig 这应该可以解决这个问题。

你的外部 tsconfig 应该有 baseUrl: "."

【讨论】:

    【解决方案2】:

    因为导入

    { path: 'admin', loadChildren: 'app/admin/admin.module#AdminModule', canLoad: [AuthGuard] }
    

    Angular 将从根目录中搜索不可用的模块。 Angular 根本不会检测到您的模块,因此您需要提供正确的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 2015-08-29
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多