带有嵌套路由器出口的 Angular 9 嵌套延迟加载模块

2023-11-23

我正在尝试使用 Angular 9 开发 SPA,我几乎尝试延迟加载每个组件及其所有子组件。当我尝试将路由器出口放在延迟加载的组件之一中并且我希望使用该路由器出口来加载子组件(也是延迟加载的)时,出现了我的问题。 当我这样做时,我总是将所有嵌套的延迟加载组件加载到 app.component.html 的主路由器出口中,而不是加载到嵌套延迟加载组件中的路由器出口中

应用程序组件模板:

<app-navbar></app-navbar>
<router-outlet></router-outlet>

应用程序路由.模块:

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'login', component: LoginComponent },
  { path: 'articles', loadChildren: () => import('./articles-viewer/articles-viewer.module').then(m => m.ArticlesViewerModule) },
  { path: 'dashboard', loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule) },
  { path: '**', redirectTo: ''}
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

应用程序模块:

@NgModule({
  declarations: [
    AppComponent,
    HomeComponent,
    LoginComponent,
    NavbarComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    BrowserAnimationsModule,
    AppAngularMaterial
  ],
  providers: [
    AppHttpInterceptors
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

navbar.component 模板:

<a routerLink="">Home</a>
<a routerLink="/articles">Articles</a>
<a routerLink="/dashboard">Dashboard</a>

仪表板模板:

<a routerLink="statistics">Statistics</a>
<router-outlet></router-outlet>

仪表板.模块:

@NgModule({
  declarations: [DashboardComponent],
  imports: [
    CommonModule,
    DashboardRoutingModule,
    AppAngularMaterial
  ]
})
export class DashboardModule { }

仪表板路由.模块:

const routes: Routes = [
  { path: '', component: DashboardComponent },
  { path: 'statistics', loadChildren: () => import('./statistics/statistics.module').then(m => m.StatisticsModule) }
  ];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class DashboardRoutingModule { }

简而言之,统计组件(延迟加载的组件)被加载到 app.component 模板中声明的 router-outlet 中,而不是仪表板模板中的 router-outlet 中,并且仪表板组件被卸载

我尝试在 angular.io 中找到解决方案,但我得到的只是管理同一组件中的多个出口。另外,这就是我在谷歌上搜索这个问题时得到的结果。

有什么解决办法吗?


我有类似的问题!我这边的问题是我导入了延迟加载的模块,因此路由定义对于应用程序路由器出口是可见的。

如果您需要示例,请随时发表评论。

更新:2021-08-24 添加了完整的代码示例

下面的例子可以无限扩展:

文件夹结构:

enter image description here

1个应用程序模块:

import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";

import { CoreModule } from "@core/core.module";
import { AppRoutingModule } from "@routes/app-routing.module";

import { AppComponent } from "./app.component";

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, CoreModule, AppRoutingModule, BrowserAnimationsModule],
  providers: [],
  bootstrap: [AppComponent],
})
export class AppModule {}

2 应用程序组件:

import { Component } from "@angular/core";

@Component({
  selector: "rot-root",
  template: ` <router-outlet></router-outlet> `, // <===== ROOT ROUTER-OUTLET
  styleUrls: ["./app.component.scss"],
})
export class AppComponent {}

3 应用程序路由.模块:

import { NgModule } from "@angular/core";
import { Routes, RouterModule } from "@angular/router";

export const ROUTES: Routes = [
  {
    path: "",
    pathMatch: "prefix",
    loadChildren: () =>
      import("./main/main-routing.module").then((m) => m.MainRoutingModule),
  },
];

@NgModule({
  declarations: [],
  imports: [
    RouterModule.forRoot(ROUTES, { enableTracing: false })
  ],
  exports: [RouterModule],
})
export class AppRoutingModule {}

4 主路由.模块:

import { NgModule } from "@angular/core";
import { Routes, RouterModule } from "@angular/router";

import { layoutModules } from "./layouts";

import { MainLayoutViewComponent } from "./layouts/main-layout/views";

export const SUBROUTES: Routes = [
  {
    path: "",
    pathMatch: "prefix",
    component: MainLayoutViewComponent, // <==== DISPLAYED IN ROOT ROUTER-OUTLET
    children: [ // <==== CHILDREN ARE DISPLAYED IN SUB ROUTER-OUTLET (6)
      {
        path: "dashboard",
        loadChildren: () => import("./dashboard/dashboard.module").then(m => m.DashboardModule)
      },
      // <==== A LOT OF ROUTES FROM THE MAIN FOLDER - SAME AS DASHBOARD ====>
    ],
  },
];

@NgModule({
  declarations: [],
  imports: [
    RouterModule.forChild(SUBROUTES),
    ...layoutModules
  ],
  exports: [RouterModule],
})
export class MainRoutingModule {}

5 主布局.模块:

import { NgModule } from "@angular/core";
import { SharedModule } from "@shared/shared.module";

// material modules
// <==== a lot of material imports :D ====>

// module components
import { views } from "./views"; // <===== HERE I IMPORT THE MAIN-LAYOUT-VIEW
import { containers } from "./containers";
import { components } from "./components";

@NgModule({
  declarations: [...views, ...containers, ...components],
  imports: [
    SharedModule,
    // <==== a lot of material imports :D ====>
  ],
})
export class MainLayoutModule {}

6 主布局视图.组件:

import { Component, OnInit } from "@angular/core";

import { Observable } from "rxjs";

import { SidenavService } from "@core/services";

@Component({
  selector: "rot-main-layout-view",
  template: `
    <rot-main-navbar></rot-main-navbar>
    <mat-drawer-container autosize hasBackdrop>
      <mat-drawer mode="over" [opened]="opened$ | async">
        <rot-main-sidenav></rot-main-sidenav>
      </mat-drawer>
      <div class="content-wrapper">
        <router-outlet></router-outlet>          <==== SUB ROUTER-OUTLET
      </div>
    </mat-drawer-container>
  `,
  styleUrls: ["./main-layout-view.component.scss"],
})
export class MainLayoutViewComponent implements OnInit {

  constructor(private _sidenavService: SidenavService) {}

  ngOnInit(): void {}

  get opened$(): Observable<boolean> {
    return this._sidenavService.opened$;
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有嵌套路由器出口的 Angular 9 嵌套延迟加载模块 的相关文章

  • 在 Nodejs 中解析嵌套 JSON

    我一直在尝试解析嵌套的 JSON 数据 下面是我的代码 var string key1 value key2 value1 Key3 key31 value 31 var obj JSON parse string console log
  • AutoMapper:将子集合 1 映射到子集合 2 时丢失未映射的属性值

    使用 AutoMapper 映射嵌套集合时 我希望任何未映射的属性都保留其原始值 相反 它们被设置为 null Example 我有这四门课 注意Test2Child有Name财产 同时Test1Child才不是 public class
  • 基本航点使用

    我正在尝试使用航点 http imakewebthings com jquery waypoints 用于延迟加载网页上元素的 jQuery 插件 但是我无法让它工作 我做了一个非常基本的例子 http jsfiddle net P3XnN
  • 嵌套列表中特定项目的求和

    我有一个数据文件 例如 1 123 something else 2 234 something else 3 500 something else 1 891 something else 2 234 something else 3 5
  • 在 Python 中使用多个列表的 For 循环[重复]

    这个问题在这里已经有答案了 我正在寻找解决我的问题的方法 目前我有两个元素列表 column width 3 3 6 8 4 4 4 4 fade 100 200 300 我想要实现的是创建 for 循环 它将给出以下输出 column 3
  • R:如何从 R 包中的 inst/extdata 延迟加载变量

    我的 inst extdata 中有一个文件 helper RData 文件 其中包含 我的包中的函数要使用的变量和数据集 但不意味着用户可以访问 我使用以下方法将其加载到包的开头 load system file extdata help
  • 模块化 AngularJS 应用程序:一个或多个 AngularJS 模块?

    我尝试使用 AngularJS 构建一个模块化应用程序 我的第一个想法是使用这种文件夹结构按功能对每个模块进行分组 core controllers js directives js app js modules users control
  • 如何在 Elasticsearch 中同时按父字段和嵌套字段排序?

    我需要同时按父字段和嵌套字段在 Elasticsearch 中排序 我的数据是这样的 id 1 rank 8 price 12 45 offers id 777 rank 12 price 45 75 id 2 rank 35 price
  • 如何从嵌套 Jar 中提取 .class 文件?

    我有一个名为 的 Jar 文件外部Jar jar 其中包含另一个名为 的罐子内Jar jar 此 InnerJar 包含 2 个名为 的文件测试1 类 测试2 类 现在我想提取这两个文件 我尝试了一些代码 但它不起作用 class Nest
  • Angular 9 ngtypecheck

    更新到 Angular 9 后 我收到警告 src main ngtypecheck ts is part of the TypeScript compilation but it s unused Add only entry point
  • React 延迟加载 JavaScript 文件

    我正在尝试使用 React lazy 来提高我的应用程序的性能 由于以太坊轻钱包是一个巨大的文件 我想将其放入一个单独的包中 当前正在运行的导入如下 import lightwallet from eth lightwallet dist
  • 使用 Go 解组嵌套 xml

    我有以下代码片段 我一直在努力让它工作 我到处寻找解决方案 但我找到的解决方案似乎都不起作用 我的映射似乎有问题xml Unmarshal命令 因为它涉及嵌套字段 下面的代码用于检索第一个被称为的值unit 并且位于 xml 代码的顶层 另
  • AngularJS、ocLazyLoad 和加载动态状态

    app define angular angular ui router ocLazyLoad config common layout services menuService function angular use strict va
  • 如何使用 Sencha Touch 数据模型读取嵌套 JSON 结构?

    我整个晚上都在试图解决这个问题 但没有成功 我有一个 JSON 结构如下 来自另一个系统 所以我无法更改其结构 parents parent parentId 1 children child childId 1 ch
  • 为什么实体框架需要 ICollection 来延迟加载?

    我想编写一个丰富的域类 例如 public class Product public IEnumerable
  • 如何通过模板中的变量访问对象字段?

    我有一个嵌套循环 columns columns range dx dataList range c columns index dx c end end dataList是orm模型数组 和ID Title字段 那么columns is
  • Nest Elastic - 构建动态嵌套查询

    我必须使用 Nest 查询嵌套对象 但是查询是以动态方式构建的 下面的代码演示了以静态方式对嵌套 书籍 进行查询 QueryContainer qry qry new QueryStringQuery DefaultField name D
  • .NET 3.5 中的实体框架延迟加载

    由于服务器限制 我仅限于 Net 3 5 我使用 Linq to SQL 进行延迟加载 但后来切换到实体框架 L2E 在 3 5 中没有延迟加载 而 L2S 有 有没有办法以某种方式重新生成模板来实现这一目标 您必须在 EF 1 NET 3
  • AngularJS 中的嵌套模块

    我有 2 个不同的 AngularJs 模块 一个 widgetContainer 和一个 widget 小部件可以显示为独立的应用程序 也可以包含在小部件容器中 一个 widgetContainer 包含 0 N 个 widget 如果我
  • mat-tab-group 不是 Angular 9 中的已知元素

    我正在使用 Angular 9 和 Angular Material 9 2 4 我正在尝试使用mat tab 组在我的 component html 中 但我不断收到错误 mat tab group is not a known elem

随机推荐

  • VSCode 自动导入 - 如何强制 Material-UI 全路径导入

    当使用 VSCode 的自动导入功能导入 Material UI 组件时 它将使用命名导入从顶级文件导入 import Button from material ui core 但是 我希望自动导入使用全路径导入反而 import Butt
  • 如何在Ajax请求中发送当前页码

    我正在使用 jQuery DataTable 在表中显示大量数据 我在 Ajax 请求中获取数据页面 如下所示 var pageNo 1 propertyTable dataTable processing true serverSide
  • 更改 Jenkins 服务器的线程数

    我在我的虚拟服务器上安装了 Jenkins 当我看到 htop Jenkins 运行有 30 个线程时 每个线程被允许分配 247MB 内存和最多 1181MB 虚拟内存 因为我只有一个小型虚拟服务器 所以我尝试更改线程数 但我找不到任何配
  • 在 Django 模型的保存方法中引发验证错误

    我不确定如何在模型的保存方法中正确引发验证错误并向用户发回明确的消息 基本上我想知道 if 的每一部分应该如何结束 我想在哪里引发错误 以及它实际保存的地方 def save self args kwargs if not good eno
  • 验证动态添加的字段

    我在单击按钮时使用 jQuery 添加一个表行 add row click function zeile ArtikelTabelle gt tbody append tr td b zeile 1 b td td td tr
  • 如何使用 PHP 将 HTML 转换为 JSON?

    我可以使用将 JSON 转换为 HTMLJsontoHtml图书馆 现在 我需要将当前的 HTML 转换为 JSON 如本网站所示 当查看代码时 我发现以下脚本
  • 使用 LineProfiler 对 Django 应用程序进行逐行分析

    我想使用 line profiler 来分析我的 django 项目以显示代码性能的分析 我正在关注这些链接 http djangotricks blogspot in 2015 01 performance bottlenecks in
  • 将 uniqueidentifier 参数传递给存储过程

    我正在尝试使用以下代码将 uniqueidentifier 参数传递给存储过程 myCommand Parameters Add BlogID SqlDbType UniqueIdentifier Value 96d5b379 7e1d 4
  • Spring配置类中可以进行构造函数注入吗?

    如果我有一个 Spring 配置类 即用 Configuration 注释的类 我可以使用构造函数注入吗 按照目前的情况 如果我添加一个 我会收到一条无默认构造函数的消息 如果我添加一个默认构造函数 它会使用它而不是重载的构造函数 这并没有
  • Ionic run android 似乎可以工作,但应用程序没有在手机上启动,为什么?

    我的手机已打开并处于调试模式 我已通过以下方式确认了这一点adb devices l 当我运行 ionic run android 时 我得到以下输出 Ionic 声称应用程序已启动 但手机上没有任何反应 我使用的是 Android 4 4
  • 使用 Swift 4.0 编译的模块无法在 Swift 3.2.1 中导入

    Swift 4 0 模块在使用 Xcode 9 0 的 Swift 3 2 应用程序中表现良好 但现在 使用 Xcode 9 1 我得到 使用 Swift 4 0 编译的模块无法在 Swift 3 2 1 中导入 Or 使用 Swift 4
  • 为什么 script.onload 在 Chrome 用户脚本中不起作用?

    我想使用用户脚本在站点中加载另一个脚本文件 但是 js onload事件无法正常工作 用户脚本文件 UserScript name Code highlight description Test include http localhost
  • 从父 iFrame 到子 iFrame 使用 postMessage 发出通信

    我在从父窗口与子 iFrame 进行通信时遇到问题 但在另一边 一切都很完美 以下是我如何获取 chil iFrame 对象以触发发布消息功能 var iFrame document getElementById Frame content
  • 设置 NSTableCellView 的背景颜色

    我试图在 NSTableCellView 上设置背景颜色 但似乎没有办法做到这一点 因此 必须有另一种我不知道的方法来实现这一目标 所以 如果有人能够启发我 我将非常感激 Thanks A NSTableCellView is a NSVi
  • iTunes Connect 添加 iOS 版本进行测试 - 版本显示为灰色?

    该构建已完成处理 但现在被困为 灰色 构建 我以前从未见过这样的事情 这是 iTunes Connect 上的全新问题吗 完全奇怪 使用 Xcode Cloud 的人可以有相同的体验 无法选择构建 要修复它 您需要选择TestFlight
  • 如何列出 scala 子目录中的所有文件?

    是否有一种很好的 scala esque 我想我的意思是功能性 方式来递归列出目录中的文件 匹配特定模式怎么样 例如递归所有匹配的文件 a foo in c temp Scala 代码通常使用 Java 类来处理 I O 包括读取目录 所以
  • Spring-Boot ResourceLocations 未添加 css 文件导致 404

    好吧 我有一个正在运行的 spring boot 应用程序 它在本地计算机上运行得很好 但是我注意到 当我执行 mvn package 时 我的 css 或 java 脚本都没有位于 src main wepapp css 被复制到目标目录
  • DateFormat 解析 - 不返回 UTC 格式的日期

    这是我的 java 代码 尝试在 Android 设备上获取 UTC 的当前日期 public static Date getCurrentDateUTC try TimeZone timeZoneUTC TimeZone getTimeZ
  • 64 位 RC2 的安全性如何?

    在加密中 如果两个对称算法的密钥大小相等 那么它们在安全性方面是否会被认为是相等的 即 64 位 RC2 算法是否提供与 64 位 AES 算法完全相同的安全性 使用 64 位 RC2 算法的安全性 或不安全性 如何 暴力攻击破解这种加密需
  • 带有嵌套路由器出口的 Angular 9 嵌套延迟加载模块

    我正在尝试使用 Angular 9 开发 SPA 我几乎尝试延迟加载每个组件及其所有子组件 当我尝试将路由器出口放在延迟加载的组件之一中并且我希望使用该路由器出口来加载子组件 也是延迟加载的 时 出现了我的问题 当我这样做时 我总是将所有嵌