延迟加载不加载模块 - Angular 8
Lazy loading doesn't load the module - Angular 8
我正在尝试延迟加载我的主页,其中包含一个 PrimeNG 模块 (MenubarModule),但它从未加载,所以我不断收到错误消息:
Error: Template parse errors:
'p-menubar' is not a known element:
app.module.ts
@NgModule({
declarations: [
AppComponent,
HomeComponent,
LoginComponent
],
imports: [
AppRoutingModule,
BrowserModule,
FormsModule,
ReactiveFormsModule,
BrowserAnimationsModule,
PanelModule,
InputTextModule,
ButtonModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
我的应用-routing.module.ts
const routes: Routes = [
{
path: '',
component: LoginComponent
},
{
path: 'login',
component: LoginComponent
},
{
path: 'home',
component: HomeComponent,
loadChildren: () => import('./home/home.module').then(m => m.HomeModule)
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
我的home.module.ts
@NgModule({
declarations: [],
imports: [
CommonModule,
MenubarModule
]
})
export class HomeModule { }
@edit
如果我将我的 MenubarModule 放在我的 app.module 中,它会工作,但我希望它在我的 home.module
中延迟加载
app.module.ts :
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
应用-routing.module.ts:
const routes: Routes = [
{ path: 'home', loadChildren: () => import('./home/home.module').then(module => module.HomeModule)},
{ path: 'login', loadChildren: () => import('./login/login.module').then(login => login.LoginModule)}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
app.component.html:
<a routerLink="/home">Home</a>
<br>
<a routerLink="/login">Login</a>
<router-outlet></router-outlet>
home.module.ts :
@NgModule({
declarations: [HomeComponent],
imports: [
CommonModule,
HomeRoutingModule
]
})
export class HomeModule { }
首页-routing.module.ts
const routes: Routes = [
{ path: '', component: HomeComponent, children: [
{ path: 'some', component: SomeComponent }
]}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class HomeRoutingModule { }
login.module.ts:
@NgModule({
declarations: [LoginComponent],
imports: [
CommonModule
]
})
export class LoginModule { }
登录-routing.module.ts
const routes: Routes = [
{ path: '', component: LoginComponent, children: [
{ path: 'another', component: AnotherComponent }
]}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class LoginRoutingModule { }
现在它必须工作了。因为 children:
您可以在 LoginComponent
和 HomeComponent
中使用 <router-outlet></router-outlet>
dom 元素。
您需要在 stackblitz 中做一些事情来修复代码
index.html应该是
<body><app-root></app-root></body>
而您的条目标签与 app-root
不同
此外,您还需要从应用程序模块和应用程序路由模块中删除所有对您的 HomeComponent 的引用,并在您的 Home 模块中添加 forChild
路由器定义
RouterModule.forChild([{ path: "", component: HomeComponent }])
在 stackblitz 工作:https://stackblitz.com/edit/angular-fu9rx5
如果您尝试延迟加载,您应该在 home.module.ts
中声明您的子组件并在 home-routing.module.ts
中定义路由,这样它就可以工作了。
从上图 admin.module.ts
来看,它有两个组成部分 home
和 settings
现在让我们看看 admin-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { SettingsComponent } from './settings/settings.component';
export const AdminRoutes: Routes = [{
path: '',
children: [
{ path: 'home', component: HomeComponent },
{ path: 'settings', component: SettingsComponent }]
}];
那些 AdminRoutes
被导入到 admin.module.ts
并且组件按以下方式声明。
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AdminRoutes } from './admin-routing.module';
import { HomeComponent } from './home/home.component';
import { SettingsComponent } from './settings/settings.component';
import { RouterModule } from '@angular/router';
@NgModule({
declarations: [HomeComponent, SettingsComponent],
imports: [
CommonModule, RouterModule.forChild(AdminRoutes)
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
})
export class AdminModule { }
然后在 app-routing.module.ts
中将其定义为延迟加载,它将永远有效。
我正在尝试延迟加载我的主页,其中包含一个 PrimeNG 模块 (MenubarModule),但它从未加载,所以我不断收到错误消息:
Error: Template parse errors:
'p-menubar' is not a known element:
app.module.ts
@NgModule({
declarations: [
AppComponent,
HomeComponent,
LoginComponent
],
imports: [
AppRoutingModule,
BrowserModule,
FormsModule,
ReactiveFormsModule,
BrowserAnimationsModule,
PanelModule,
InputTextModule,
ButtonModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
我的应用-routing.module.ts
const routes: Routes = [
{
path: '',
component: LoginComponent
},
{
path: 'login',
component: LoginComponent
},
{
path: 'home',
component: HomeComponent,
loadChildren: () => import('./home/home.module').then(m => m.HomeModule)
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
我的home.module.ts
@NgModule({
declarations: [],
imports: [
CommonModule,
MenubarModule
]
})
export class HomeModule { }
@edit
如果我将我的 MenubarModule 放在我的 app.module 中,它会工作,但我希望它在我的 home.module
app.module.ts :
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
应用-routing.module.ts:
const routes: Routes = [
{ path: 'home', loadChildren: () => import('./home/home.module').then(module => module.HomeModule)},
{ path: 'login', loadChildren: () => import('./login/login.module').then(login => login.LoginModule)}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
app.component.html:
<a routerLink="/home">Home</a>
<br>
<a routerLink="/login">Login</a>
<router-outlet></router-outlet>
home.module.ts :
@NgModule({
declarations: [HomeComponent],
imports: [
CommonModule,
HomeRoutingModule
]
})
export class HomeModule { }
首页-routing.module.ts
const routes: Routes = [
{ path: '', component: HomeComponent, children: [
{ path: 'some', component: SomeComponent }
]}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class HomeRoutingModule { }
login.module.ts:
@NgModule({
declarations: [LoginComponent],
imports: [
CommonModule
]
})
export class LoginModule { }
登录-routing.module.ts
const routes: Routes = [
{ path: '', component: LoginComponent, children: [
{ path: 'another', component: AnotherComponent }
]}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class LoginRoutingModule { }
现在它必须工作了。因为 children:
您可以在 LoginComponent
和 HomeComponent
中使用 <router-outlet></router-outlet>
dom 元素。
您需要在 stackblitz 中做一些事情来修复代码
index.html应该是
<body><app-root></app-root></body>
而您的条目标签与 app-root
此外,您还需要从应用程序模块和应用程序路由模块中删除所有对您的 HomeComponent 的引用,并在您的 Home 模块中添加 forChild
路由器定义
RouterModule.forChild([{ path: "", component: HomeComponent }])
在 stackblitz 工作:https://stackblitz.com/edit/angular-fu9rx5
如果您尝试延迟加载,您应该在 home.module.ts
中声明您的子组件并在 home-routing.module.ts
中定义路由,这样它就可以工作了。
从上图 admin.module.ts
来看,它有两个组成部分 home
和 settings
现在让我们看看 admin-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { SettingsComponent } from './settings/settings.component';
export const AdminRoutes: Routes = [{
path: '',
children: [
{ path: 'home', component: HomeComponent },
{ path: 'settings', component: SettingsComponent }]
}];
那些 AdminRoutes
被导入到 admin.module.ts
并且组件按以下方式声明。
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AdminRoutes } from './admin-routing.module';
import { HomeComponent } from './home/home.component';
import { SettingsComponent } from './settings/settings.component';
import { RouterModule } from '@angular/router';
@NgModule({
declarations: [HomeComponent, SettingsComponent],
imports: [
CommonModule, RouterModule.forChild(AdminRoutes)
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
})
export class AdminModule { }
然后在 app-routing.module.ts
中将其定义为延迟加载,它将永远有效。