【发布时间】:2020-04-20 21:50:55
【问题描述】:
我遇到了 angular 9 的一些问题,无法正常工作。 我的文件是这样的:
routes.ts
import { LayoutComponent } from './../layout/layout.component';
import { Routes } from '@angular/router';
export const routes: Routes = [
{ path: '', component: LayoutComponent, children: [
{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
{ path: 'dashboard', loadChildren: () => import('./dashboard/dashboard.module').then((m) => m.DashboardModule)},
{ path: 'table', loadChildren: () => import('./table/table.module').then((m) => m.TableModule)},
{ path: 'form', loadChildren: () => import('./form/form.module').then((m) => m.FormModule)}
]}
];
app-routes.moudule.ts
import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { routes } from './routes';
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutesModule {}
app.module.ts
import { LayoutModule } from './layout/layout.module';
import { AppRoutesModule } from './routes/app-routes.module';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
LayoutModule,
AppRoutesModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
layout.component.html
<p>layout works! works</p>
<router-outlet></router-outlet>
layout.module.ts
import { LayoutComponent } from './layout.component';
import { NgModule } from '@angular/core';
@NgModule({
declarations: [LayoutComponent],
exports: [LayoutComponent]
})
export class LayoutModule {}
当我运行 ng serve 时,它总是提示:
块引用
src/app/layout/layout.component.html:2:1 中的错误 - 错误 NG8001:'router-outlet' 不是已知元素: 1.如果'router-outlet'是一个Angular组件,那么验证它是这个模块的一部分。 2. 如果“router-outlet”是一个 Web 组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到该组件的“@NgModule.schemas”以禁止显示此消息。
2 <router-outlet></router-outlet>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/app/layout/layout.component.ts:5:16
5 templateUrl: './layout.component.html',
~~~~~~~~~~~~~~~~~~~~~~~~~
Error occurs in the template of component LayoutComponent.
块引用
有人可以帮我弄清楚吗?
另外,在 layout.component.html 文件中,不显示子内容,例如表单组件、表格组件或仪表板组件。
有什么建议吗?
【问题讨论】:
-
LayoutModule和AppModule是不同的模块,你只在AppModule声明路由,LayoutModule不知道路由器 -
我在app.module.ts中导入了layoutmodule,这里我也导入了路由模块,所以layout模块应该知道路由。对吗?
-
我认为你把事情复杂化了,如果有的话,你必须将 RoutingModule 导入 LayoutModule 以便它知道路由器出口;如果将使用路由的组件是 LayoutComponent,而不是 AppComponent,则 LayoutComponent 应该将路由模块导入其中
-
但我的想法是 app.module 只是为了入口,它使用路由显示布局组件,只有标题和侧边菜单,然后布局组件使用路由显示子项,这是详细内容.这就是为什么我这样放置代码的原因。但是,我的问题是为什么 angular think router-outlet 不是已知元素,但我在导入布局模块的地方导入 routermodule。
-
我建议再次阅读 Angular 文档,我明白你想要做什么,问题是 Angular 不能那样工作,以便 Module可以访问指令或组件,必须将它们导入在该模块中,将模块导入另一个具有您需要的模块将不起作用,因为每个模块只能访问其中的内容.. .在您的情况下,AppModule 知道 router-outlet 因为它是直接导入其中的,但 LayoutModule 不知道,因为路由模块仅在 AppModule 中,而不在 LayoutModule 中
标签: angular