[英]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.