Angular 路由的基本延迟加载模块路由问题
Basic lazy loading module routing issue with Angular Routing
尽管我是 Angular 的新手,但这应该是如此简单以至于让我发疯。我使用带有“Use Angular Routing”选项的 CLI 创建了一个 Angular 项目。创建了一个功能模块,并使用 VS Code 中的脚手架插件("Angular Files" by Alexander Ivanichev)为其添加路由 class。起初我只是直接在 app.component.html 中添加组件选择器并且它工作正常,一旦我添加了路由器插座,将所有东西连接在一起并将“/submodule”部分添加到浏览器中的地址,子模块组件不再显示在页面中,并且控制台中没有任何错误。
如您所见,脚手架工具做了一些与文档略有不同的事情,我尝试修改所有内容以创建一个常规的 NgModule 并四处移动,但它仍然不起作用。
这是我的设置:
app.component.html
<div class="root-container">
<header>
Site name and other things go here
</header>
<aside class="menu">
<h2>Menu</h2>
<nav>
<ul>
<li><a href="*">Menu item 1</a></li>
<li><a href="*">Menu item 2</a></li>
<li><a href="*">Menu item 3</a></li>
<li><a href="*">Menu item 4</a></li>
</ul>
</nav>
</aside>
<div class="content">
<router-outlet></router-outlet>
<!--
<app-my-component></app-my-component>
-->
</div>
<aside>some content</aside>
<footer>This is the footer</footer>
</div>
app.module.ts
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
MyFeatureModule, <- This is the one I'm trying to load
AppRoutingModule
],
providers: [],
exports: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app-routing.module.ts
const routes: Routes = [
{ path: 'submodule', loadChildren: () => import('./featuremodule/feature.module').then(m => m.MyFeatureModule)}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
featuremodule.module.ts
@NgModule({
declarations: [
MyComponent
],
imports: [
CommonModule,
FeatureModuleRoutes
],
providers: [
// some providers
],
exports: []
})
export class MyFeatureModule { }
featuremodule.routing.ts
const routes: Routes = [
{ path: 'mycomponent', component: MyComponent },
];
export const FeatureRoutes = RouterModule.forChild(routes);
感谢您的帮助
根据您的路线设置,您需要导航至 /submodule/mycomponent
以查看 MyComponent
组件。
此外,您不应再将 MyFeatureModule
导入 AppModule
。这将破坏延迟加载模块的目的,因为它将包含在您的 AppModule
.
中
StackBlitz
您不需要在 app.module.ts
中导入 MyFeatureModule
尽管我是 Angular 的新手,但这应该是如此简单以至于让我发疯。我使用带有“Use Angular Routing”选项的 CLI 创建了一个 Angular 项目。创建了一个功能模块,并使用 VS Code 中的脚手架插件("Angular Files" by Alexander Ivanichev)为其添加路由 class。起初我只是直接在 app.component.html 中添加组件选择器并且它工作正常,一旦我添加了路由器插座,将所有东西连接在一起并将“/submodule”部分添加到浏览器中的地址,子模块组件不再显示在页面中,并且控制台中没有任何错误。
如您所见,脚手架工具做了一些与文档略有不同的事情,我尝试修改所有内容以创建一个常规的 NgModule 并四处移动,但它仍然不起作用。
这是我的设置:
app.component.html
<div class="root-container">
<header>
Site name and other things go here
</header>
<aside class="menu">
<h2>Menu</h2>
<nav>
<ul>
<li><a href="*">Menu item 1</a></li>
<li><a href="*">Menu item 2</a></li>
<li><a href="*">Menu item 3</a></li>
<li><a href="*">Menu item 4</a></li>
</ul>
</nav>
</aside>
<div class="content">
<router-outlet></router-outlet>
<!--
<app-my-component></app-my-component>
-->
</div>
<aside>some content</aside>
<footer>This is the footer</footer>
</div>
app.module.ts
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
MyFeatureModule, <- This is the one I'm trying to load
AppRoutingModule
],
providers: [],
exports: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app-routing.module.ts
const routes: Routes = [
{ path: 'submodule', loadChildren: () => import('./featuremodule/feature.module').then(m => m.MyFeatureModule)}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
featuremodule.module.ts
@NgModule({
declarations: [
MyComponent
],
imports: [
CommonModule,
FeatureModuleRoutes
],
providers: [
// some providers
],
exports: []
})
export class MyFeatureModule { }
featuremodule.routing.ts
const routes: Routes = [
{ path: 'mycomponent', component: MyComponent },
];
export const FeatureRoutes = RouterModule.forChild(routes);
感谢您的帮助
根据您的路线设置,您需要导航至 /submodule/mycomponent
以查看 MyComponent
组件。
此外,您不应再将 MyFeatureModule
导入 AppModule
。这将破坏延迟加载模块的目的,因为它将包含在您的 AppModule
.
StackBlitz
您不需要在 app.module.ts
中导入 MyFeatureModule