大家好,
我的 Angular 2 应用程序在服务器启动时遇到了这个问题 (
npm start
)。
我将基本路由或基本路径重定向到
user/login
,这是一个延迟加载模块,但它会抛出 Cannot find module
错误。正如我所说,这总是发生,在启动和编辑 pathMatch
参数从 'full'
到 'prefix'
的过程中,反之亦然修复了错误并加载了没有错误的路线。
我希望你能帮助我。
下面是程序。
app/routes.ts
import { Routes } from '@angular/router';
import { AppComponent } from './app.component';
export const appRoutes:Routes = [
{ path: 'user', loadChildren: 'user/user.module#UserModule'},
{ path: '', redirectTo: 'user/login', pathMatch: 'full'}
]
app/app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule, Routes } from '@angular/router';
import { AppComponent } from './app.component';
import { appRoutes } from './routes';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
RouterModule.forRoot(appRoutes)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app/user/user.routes.ts
import { LoginComponent } from "./login.component";
export const userRoutes = [
{ path: 'login', component: LoginComponent }
]
app/user/user.module.ts
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { RouterModule } from "@angular/router";
import { userRoutes } from "./user.routes";
import { LoginComponent } from "./login.component";
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(userRoutes)
],
declarations: [
LoginComponent
],
providers: [UserAuthService]
})
export class UserModule {}
我希望我已经提供了关于我的问题的足够信息。如果没有,请告诉我。谢谢。
编辑:
我在启动时访问
user/login
时遇到同样的错误。
编辑: 从 Angular 8 开始,延迟加载模块的方法是使用动态导入,例如:
export const appRoutes:Routes = [
{ path: 'user', loadChildren: () => import('path-to-module').then(m => m.UserModule)},
{ path: '', redirectTo: 'user', pathMatch: 'full'}
]
接受的答案根本不是实现 lazyLoading 的正确方法。 这应该是路由机制:
app.routes.ts
export const appRoutes:Routes = [
{ path: 'user', loadChildren: 'user/user.module#UserModule'},
{ path: '', redirectTo: 'user', pathMatch: 'full'}
]
user.routes.ts
export const userRoutes = [
{
path: '',
children: [
{ path: '', redirectTo: 'login', pathMatch: 'full' },
{
path: 'login',
component: LoginComponent
}]
} ]
ibenjelloun的答案是正确的。由于您以某种方式提到它似乎对您不起作用,因此我提供了另一种子路线的方法。
() =>
符号实际上对我有用。下面是我如何通过编辑 routes.ts 文件修复它的代码
app/routes.ts
import { UserModule } from './user/user.module';
export const appRoutes:Routes = [
{ path: 'user', loadChildren: () => UserModule},
{ path: 'login', component: LoginComponent},
{ path: '', redirectTo: 'user/login', pathMatch: 'full'}
]
尝试像这样更改您的user.module.ts:
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(userRoutes)
],
declarations: [
LoginComponent
],
exports: [RouterModule], // Add this line
providers: [UserAuthService]
})
export class UserModule {}
和routes.ts:
export const appRoutes:Routes = [
{ path: 'user', loadChildren: 'user/user.module#UserModule'},
{ path: '', redirectTo: 'user', pathMatch: 'full'}
]
还有user.routes.ts:
export const userRoutes = [
{ path: '', redirectTo: 'login', pathMatch: 'full'},
{ path: 'login', component: LoginComponent }
]
如果您的用户有家庭组件,这个技巧对我有用:
app.routes.ts
export const appRoutes:Routes = [
{ path: '', redirectTo: 'user', pathMatch: 'full' }
{ path: 'user', loadChildren: () => import('path-to-module').then(m => m.UserModule) }
]
user.routes.ts
export const userRoutes = [{
path: '',
component: UserComponent,
children: [ {
path:'',
redirectTo: 'login',
pathMatch: 'full'
}, {
path: 'login',
component: LoginComponent
}, {
path: 'register',
component: RegisterComponent
}]
}
]