angular - Angular - 渲染组件存在于根 url 上的另一个模块中
问题描述
我有Angular 8
申请。我已将我的应用程序划分为不同的模块。
- 应用模块
- 主页模块
- 用户模块
我正在尝试在根 url (' /
')上加载 HomeModule 中存在的 HomeComponent
app.component.html
<app-header></app-header>
<router-outlet></router-outlet>
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HeaderComponent } from './module/common/header/header.component';
import { HomeModule } from './module/home/home/home.module';
//& so on.
@NgModule({
declarations: [
AppComponent,
LogoComponent,
MenuComponent,
SearchComponent,
SignComponent,
HeaderComponent
],
imports: [
BrowserModule,
AppRoutingModule,
HomeModule,
UserModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app.routing.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './module/home/home/home.component';
import { HomeModule } from './module/home/home/home.module';
const routes: Routes = [
{ path : '', component : HomeComponent, loadChildren: ()=>
import('../app/module/home/home.module').then(mod => mod.HomeModule)}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
home.module.ts
import { NgModule } from "@angular/core";
import { CommonModule } from '@angular/common';
import { HomeComponent } from './home/home.component';
@NgModule({
declarations:
[
HomeComponent
],
imports: [
CommonModule,
HomeRoutingModule
],
exports: [
HomeComponent
],
providers: []
})
export class HomeModule { }
但是在运行应用程序时,它会抛出以下错误。
组件 HomeComponent 不是任何 NgModule 的一部分,或者该模块尚未导入您的模块
是什么导致了这个错误?
谢谢!
解决方案
你在 app.routing.ts 中犯了一个错误
常量路由:Routes = [ { path : '', component : HomeComponent, loadChildren: ()=> import('../app/module/home/home.module').then(mod => mod.HomeModule)} ];
正确的代码应该是:
const routes: Routes = [
{ path : '', loadChildren: ()=> import('../app/module/home/home.module').then(mod => mod.HomeModule)}
];
然后像这样创建一个 home.routing.ts 和代码:
const routes: Routes = [
{ path : '', component : HomeComponent }
];
由于您不需要在任何其他模块中使用它并且显然不应该,因此从导出中删除 HomeComponent:
exports: [ HomeComponent ],
应该删除此代码。
解释: 因为在 app 组件中,我们是延迟加载模块,而不是组件。所以,我们不应该在 app.routing.ts 中指定 homeComponent。
每个模块都应该有自己的路由。由于 home 是一个模块,它应该有一个 home.routing.ts 并且我们需要指定它在加载 home 模块时应该走哪条路由。因此,我们在主路由中指定主组件。
推荐阅读
- docker - Nginx 入口控制器无法运行
- php - 如何使用 PHP 正确格式化这个数字?
- javascript - 我似乎无法将 null 值更改为 chart.JS 上的字符串
- javascript - 如何读取我们文件夹中的 json 文件并将其放在 html 中
- sql - 如何从配置单元中的表中获取组合值
- php - 未定义索引,但索引存在
- angular - 以编程方式设置角度材料选择自动完成的值
- python - 如何在其中包含多个 django 模型的 django 项目中运行 python 脚本
- javascript - Highcharts:打开新组件时如何以角度停止服务实时图表(highcharts)?
- derivative - (Openmdao 2.4.0) 不提供衍生品/强制 FD 在具有衍生品的学科上的区别