简体   繁体   English

在 Angular 路由中找不到模块

[英]Cannot find module in Angular routing

My folder structure is:我的文件夹结构是:

+-- app.module.ts
+-- app.routing.ts
+-- app.component.ts
+-- account/
|   +-- account.module.ts
|   +-- account.routing.ts
|   +-- account.component.ts

In my app.routing.ts I have,在我的 app.routing.ts 中,

  { path: 'account', loadChildren: './account/account.module#AccountModule' },

And, in account.routing.ts, I have,而且,在 account.routing.ts 中,我有,

  { path: 'login', component: LoginFormComponent}

but when I enter page/account/login I get the following error:但是当我输入页面/帐户/登录时,出现以下错误:

NodeInvocationException: Uncaught (in promise): Error: Cannot find module './account/account.module'. NodeInvocationException:未捕获(承诺):错误:找不到模块“./account/account.module”。 Error: Cannot find module './account/account.module'.错误:找不到模块“./account/account.module”。

I've tried changing ./account/account.module#AccountModule to app/account/account.module#AccountModule, same error.我尝试将 ./account/account.module#AccountModule 更改为 app/account/account.module#AccountModule,同样的错误。

Any thoughts?有什么想法吗? Thanks in advance.提前致谢。

you can try changing你可以尝试改变

  { path: 'account', loadChildren: './account/account.module#AccountModule' }

to

import {AccountModule} from './path';

{ path: 'account', loadChildren: ()=> AccountModule' }

note - do not forget to import module as above注意- 不要忘记像上面一样导入模块

The string version of loadChildren has been deprecated in angular 8 loadChildren的字符串版本已在 angular 8 中弃用

See: https://github.com/angular/angular/blob/master/CHANGELOG.md#800-2019-05-28 See: https://angular.io/api/router/LoadChildren见: https : //github.com/angular/angular/blob/master/CHANGELOG.md#800-2019-05-28见: https : //angular.io/api/router/LoadChildren

New syntax in angular 8/9 angular 8/9 中的新语法

The new syntax takes a dynamic import expression .新语法采用动态导入表达式 This is a function that returns an import.这是一个返回导入的函数。 It is critical that you import your module there.在那里导入模块至关重要。 Otherwise you are not lazy loading the module, but eagerly loading it.否则你不是懒加载模块,而是急切地加载它。

{ 
path: 'account', 
loadChildren: ()=> import('./account/account.module').next(mod => mod.AccountModule) 
}

The docs: https://angular.io/api/router/LoadChildrenCallback文档: https : //angular.io/api/router/LoadChildrenCallback

New syntax in angular 10 angular 10 中的新语法

In angular 10 the syntax slightly changed again.在 angular 10 中,语法再次略有变化。 Now it provides the import as a result of a JavaScript Promise ( import returns a Promise : ):现在它提供了作为 JavaScript Promise 结果的导入import 返回一个 Promise : ):

{ 
path: 'account', 
loadChildren: ()=> import('./account/account.module').then(mod => mod.AccountModule) 
}

Warning: Assigning a module after importing will not lazy load your module!警告:导入后分配模块不会延迟加载您的模块!

S.Pradeep's solution will still eagerly load the module! S.Pradeep 的解决方案仍然会急切地加载模块! You can check for yourself by implementing both approaches while checking the new (lazy loaded) network request navigating to a lazy loaded path.您可以通过在检查导航到延迟加载路径的新(延迟加载)网络请求的同时实现这两种方法来自行检查。

Make sure that your account module sould have a single route like below确保您的帐户模块应具有如下所示的单一路线

code for routing which will be routed once the module is lazy loaded一旦模块被延迟加载,将被路由的路由代码

const routes: Routes = [{
  path: ':something',
  component: AccountComponent,
}];

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

Calling the routing module in core module调用核心模块中的路由模块

@NgModule({
  imports: [
    CommonModule,
    NgbModule.forRoot(),
    AccountRoutingModule,
    ...

I had the same issue, i tried couple of things.我有同样的问题,我尝试了几件事。 But changing app.routing.ts does the trick.但是改变app.routing.ts可以解决问题。

just replace your line with :只需将您的行替换为:

{ path: 'account', loadChildren: () => AccountModule },

I hope it helps我希望它有帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM