Angular 无法在服务器启动时将延迟加载的模块重定向为默认路由/url

Angular 无法在服务器启动时将延迟加载的模块重定向为默认路由/url,angular,angular-ui-router,Angular,Angular Ui Router,大家好 服务器启动npm start时,Angular 2应用程序中出现了此问题 我将基本路由或基本路径重定向到user/login,这是一个延迟加载的模块,但它抛出了一个找不到模块错误。正如我所说,在启动和编辑pathMatch参数时,从“full”到“prefix”总是会发生这种情况,反之亦然,这样可以修复错误并加载路由而不出错 我希望你能帮我做这件事 下面是节目 app/routes.ts app/app.module.ts app/user/user.routes.ts app/user

大家好

服务器启动npm start时,Angular 2应用程序中出现了此问题

我将基本路由或基本路径重定向到user/login,这是一个延迟加载的模块,但它抛出了一个找不到模块错误。正如我所说,在启动和编辑pathMatch参数时,从“full”到“prefix”总是会发生这种情况,反之亦然,这样可以修复错误并加载路由而不出错

我希望你能帮我做这件事

下面是节目

app/routes.ts

app/app.module.ts

app/user/user.routes.ts

app/user/user.module.ts

我希望就我的问题提供了足够的信息。如果没有,请告诉我。多谢各位

编辑:

启动时访问user/login时,我遇到了相同的错误。

尝试如下更改您的user.module.ts:

@NgModule({
imports: [
    CommonModule,
    RouterModule.forChild(userRoutes)
],
declarations: [
    LoginComponent
],
exports: [RouterModule], // Add this line
providers: [UserAuthService]
})

export class UserModule {}

另外,user.routes.ts:

尝试如下更改您的user.module.ts:

@NgModule({
imports: [
    CommonModule,
    RouterModule.forChild(userRoutes)
],
declarations: [
    LoginComponent
],
exports: [RouterModule], // Add this line
providers: [UserAuthService]
})

export class UserModule {}

另外,user.routes.ts:

=>符号实际上对我有用。下面是我的代码,我只是通过编辑routes.ts文件来修复它

app/routes.ts

=>符号实际上对我有用。下面是我的代码,我只是通过编辑routes.ts文件来修复它

app/routes.ts

编辑: 从Angular 8开始,延迟加载模块的方法是使用动态导入,例如:

导出常数批准:路由=[ {path:'user',loadChildren:=>import'path-to-module'。然后m=>m.UserModule}, {路径:,重定向到:'user',路径匹配:'full'} ] 公认的答案根本不是实现懒散加载的正确方法。 这应该是路由机制:

app.routes.ts

]

user.routes.ts

} ]

答案是正确的。由于您提到它似乎对您不起作用,因此我提供了另一种使用子路由的方法。

编辑: 从Angular 8开始,延迟加载模块的方法是使用动态导入,例如:

导出常数批准:路由=[ {path:'user',loadChildren:=>import'path-to-module'。然后m=>m.UserModule}, {路径:,重定向到:'user',路径匹配:'full'} ] 公认的答案根本不是实现懒散加载的正确方法。 这应该是路由机制:

app.routes.ts

]

user.routes.ts

} ]



答案是正确的。由于您提到它似乎对您不起作用,因此我提供了一种使用子路由的替代方法。

在尝试直接访问localhost:port/user路径时,您是否有相同的错误?user/login不是已定义的路由。@ibenjelloun是的,我有相同的错误。@ibenjelloun user/login是通过routes.ts上的用户定义的,该用户在加载所述模块的子路由后,将其前置并转换为angular。您没有在UserModule中导出RouterModule,对吗?你的路由架构没有真正意义。如果UserModule是您在初始化时从根应用程序直接路由到的模块,为什么要延迟加载它?这当然不是延迟加载的用例。当您尝试直接访问localhost:port/user路径时,是否也有相同的错误?user/login不是已定义的路由。@ibenjelloun是的,我有相同的错误。@ibenjelloun user/login是通过routes.ts上的用户定义的,该用户在加载所述模块的子路由后,将其前置并转换为angular。您没有在UserModule中导出RouterModule,对吗?你的路由架构没有真正意义。如果UserModule是您在初始化时从根应用程序直接路由到的模块,为什么要延迟加载它?这当然不是延迟加载的用例。这并没有解决我的问题。您是否也遇到同样的错误?请提供一些细节。看看这个最简单的例子,您可能忘记了其他配置:不幸的是,即使我已经遵循了您的答案,我仍然会得到相同的错误。实际上,我对我的应用程序的行为感到困惑。我已经用这个跟踪了angular docs,但是我仍然有同样的错误。这并没有解决我的问题。你也有同样的错误吗?请提供一些细节。看看这个最简单的例子,您可能忘记了其他配置:不幸的是,即使我已经遵循了您的答案,我仍然会得到相同的错误。实际上,我对我的应用程序的行为感到困惑。我已经按照angular文档进行了此操作,但仍然存在相同的错误。警告:这将阻止您的模块延迟加载。如果要保留延迟加载,您应该使用答案。警告:这将阻止您的模块延迟加载。如果您想保留延迟加载,您应该使用答案。请注意,使用字符串值加载延迟模块是非常困难的。延迟加载模块的正确方法是使用导入函数
:loadChildren:=>import./user/user.module'.Thennm=>m.usermodule请注意,使用字符串值加载惰性模块是非常困难的。延迟加载模块的正确方法是使用导入函数:loadChildren:=>import./user/user.module'。然后m=>m.UserModule
import { LoginComponent } from "./login.component";

export const userRoutes = [
    { path: 'login', component: LoginComponent }
]
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 {}
@NgModule({
imports: [
    CommonModule,
    RouterModule.forChild(userRoutes)
],
declarations: [
    LoginComponent
],
exports: [RouterModule], // Add this line
providers: [UserAuthService]
})

export class UserModule {}
export const appRoutes:Routes = [
    { path: 'user', loadChildren:  'user/user.module#UserModule'},  
    { path: '', redirectTo: 'user', pathMatch: 'full'}
]
export const userRoutes = [
    { path: '', redirectTo: 'login', pathMatch: 'full'},
    { path: 'login', component: LoginComponent }
]
import { UserModule } from './user/user.module';

export const appRoutes:Routes = [
  { path: 'user', loadChildren: () => UserModule},
  { path: 'login', component: LoginComponent},    
  { path: '', redirectTo: 'user/login', pathMatch: 'full'}
]
export const appRoutes:Routes = [
{ path: 'user', loadChildren:  'user/user.module#UserModule'},  
{ path: '', redirectTo: 'user', pathMatch: 'full'}
export const userRoutes = [
 {
path: '',
children: [
  { path: '', redirectTo: 'login', pathMatch: 'full' },
  {
    path: 'login',
    component: LoginComponent
  }]