使用 angular2 在同一路由器出口中加载多个组件

2023-11-25

我的 angular2 应用程序的根组件有以下模板:

<main class="main">
  <div class="main__container">
    <div class="main__left-area">
      <router-outlet name="left-zone"></router-outlet>
    </div>
    <div class="main__right-area">
      <router-outlet name="right-zone"></router-outlet>
    </div>
  </div>
</main>

以及以下路线:

import { HomeSummaryComponent } from "../components/home-summary/home-summary.component"
import { DataSummaryComponent } from "../components/data-summary/data-summary.component"
import { AskSummaryComponent } from "../components/ask-summary/ask-summary.component"

import { Routes } from "@angular/router"

export const AppRoutes: Routes = [
  {
    path: "",
    component: HomeSummaryComponent,
    outlet: "left-zone"
  },
  {
    path: "",
    component: DataSummaryComponent,
    outlet: "right-zone"
  }
];

它实际上工作得很好,但我希望能够在“右区”(实际上也在左区)加载多个组件。这个想法是有这样的东西:

{
  path: "",
  components: [ DataSummaryComponent, AskSummaryComponent ],
  outlet: "right-zone"
}

控制器将被一一附加。目前支持吗?如果不是,是否可以扩展现有的 RouterOutlet 来实现这一点?

Thanks


只能为一个组件分配一条路线,您可以做的是添加一个父组件,其中包含DataSummaryComponent & AskSummaryComponent并在路由中进行配置。

Update:

正如评论中提到的,您可以创建一个通用组件,它使用路由中的数据属性配置动态加载组件,

路由配置

const appRoutes: Routes = [
  { path: '',   redirectTo: '/route1', pathMatch: 'full' },
  { path: 'route1',  component: MasterComponent, data: {puppets : [PuppetComponent1]} },
  { path: 'route2',  component: MasterComponent,  data: {puppets : [PuppetComponent2, PuppetComponent3]}},
  { path: 'route3',  component: MasterComponent,  data: {puppets : [PuppetComponent1, PuppetComponent2, PuppetComponent4]}}
];

主组件

@Component({
  template: `<h1>I am the Master of components</h1>
  <hr />
  <div #puppetContainer></div>
  `
})
class MasterComponent { 
   @ViewChild('puppetContainer', { read: ViewContainerRef }) puppetContainer: ViewContainerRef;

    constructor(
        private router: Router,
        private route: ActivatedRoute,
        private _componentFactoryResolver: ComponentFactoryResolver,
        private viewContainer: ViewContainerRef) {

    }

    ngOnInit(){
       this.route.data
           .subscribe(data => {
              if(!!data && !!data.puppets && data.puppets.length > 0){
                data.puppets.map(puppet => {
                  let componentFactory = this._componentFactoryResolver.resolveComponentFactory(puppet);
                  this.puppetContainer.createComponent(componentFactory);
                });
              }
           });
    }

}

检查这个笨蛋!!

希望这可以帮助!!

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

使用 angular2 在同一路由器出口中加载多个组件 的相关文章

随机推荐

  • JQuery 滚动/分页选项卡

    我正在尝试为一个网站创建一个简单的选项卡栏 该网站能够滚动不适合页面的选项卡 这非常简单 不需要任何 ajax 或动态加载的内容 它只是显示所有选项卡 当您单击一个选项卡时 它会将您带到另一个页面 我已经在互联网上搜索过 但似乎找不到除以下
  • 将多对多关系迁移到 Core Data 中的联接表

    我有一个 iPhone 应用程序 它使用多对多关系将标签和注释链接在一起 我目前正在使用核心数据的 关系 功能来完成此任务 但希望迁移到使用连接表 这是我的挑战 我想从旧模型迁移到联接表模型 并且我需要弄清楚如何执行该数据迁移 有没有关于如
  • 捕获任何 VCL 组件上的鼠标单击,并确定其 .Tag 值

    我正在使用国产翻译工具 下次我将使用其中一个库 如下所述 delphi翻译工具 我的翻译人员抱怨翻译一长串字符串很困难 因为他们没有在上下文中看到它们 在它们出现的屏幕上 一位翻译提出了一个很好的建议 他应该能够单击某个组件来更改其文本 我
  • 这是显而易见的事情,但为什么会失败呢?

    编写 net 代码已经很多年了 但我感觉自己像个菜鸟 为什么下面的代码会失败 byte a Guid NewGuid ToByteArray 16 bytes in array string b new UTF8Encoding GetSt
  • 谷歌浏览器和火狐浏览器缓存 DNS 记录多长时间

    多长时间Firefox and Chrome cache DNS记录在自己的 浏览器 中DNS缓存 他们尊重吗TTL 我认为它是重复的Firefox 使 DNS 缓存失效 它有两个配置值Firefox network dnsCacheExp
  • HTML 源代码中锚点之间的新线会在浏览器中创建空白空间 [重复]

    这个问题在这里已经有答案了 可能的重复 如何消除内联元素之间的空格的可见性 我通常将源代码格式化为易于人类阅读 据我所知浏览器会删除任何 n t来自源的字符 因此它们不会进入渲染的 html 今天 我构建了一个菜单 在渲染的 html 中的
  • fopen无法打开文件的原因是什么

    我有以下代码 我试图打开一个文本文件 char frd 32 word list txt FILE rd fopen frd rb if rd std cout lt lt Coudn t open file t lt
  • 阻止来源为“http://localhost:8084”的框架访问跨源框架

    我正在尝试打印由 jspdf 生成并加载到 iframe 上的 pdf 但收到以下错误消息 DOMException 阻止了具有原点的框架 http 本地主机 8084 从访问跨源框架 这是我的代码 function open var pd
  • 单元测试帮助。如何测试控制台的消息输出?

    我是单元测试的新手 如何检查控制台输出 我有 namespace XXShapes public abstract class XXShape public virtual void DrawXXShape Console WriteLin
  • 在 try catch 中使用 Throwable 和 Exception 之间的区别[重复]

    这个问题在这里已经有答案了 有时 我看到 try catch Throwable e 有时 try catch Exception e 有什么不同 通过捕捉Throwable它包括子类化的东西Error 通常 您不应该这样做 除非在线程的最
  • 用于条件绑定的 swift 2 初始值设定项必须具有可选类型,而不是“UIImage”

    更新我的 xcode 以运行 swift 2 后 它给了我这两个我很难解决的错误 Error 1无法为 String AnyObject 类型的值添加下标 索引类型为 String Code let image UIImage editin
  • 这些频段过去是靠肉眼判断的,那么如何以编程方式来判断呢?

    操作员过去常常检查频谱 了解位置和width每个峰值并判断该谱图所属的部分 在新的方式中 图像由相机捕获到屏幕上 并且每个带的宽度必须以编程方式计算 旧系统 分光镜 gt 人眼 新系统 分光镜 gt 相机 gt 程序 有什么好的方法可以计算
  • 按索引列表拆分字符串

    我想按索引列表拆分字符串 其中拆分段以一个索引开始 并在下一个索引之前结束 Example s long string that I want to split up indices 0 5 12 17 parts s index for
  • 二叉树问题。检查相似形状

    嗨 我被困在这样做 不知道该怎么做 如果我有两个二叉树 我如何检查它们是否具有相同的形状 只要树结构相等 节点中的数据并不重要 关于如何解决这个问题有什么想法吗 您可以通过递归轻松地做到这一点 下面的代码之所以有效 是因为当且仅当两个非空树
  • Scala - 新与对象扩展

    使用 new 运算符定义对象与通过扩展类定义独立对象有什么区别 更具体地说 给定类型class GenericType 有什么区别val a new GenericType and object a extends GenericType
  • 从 Linux shell 中的“ftp”命令获取退出状态代码

    我需要从命令行程序检索退出状态代码 不用担心 我用了 但对于 ftp 即使它没有连接 它也会打开 ftp shell 所以我无法理解连接尚未发生 尝试这段代码来理解 bin sh ftp 1234567 OUT if OUT eq 0 th
  • 在 UI 测试我的 SwiftUI 应用程序时如何访问 VStack

    我有一个VStack代码依赖于 onTapGesture方法 像这样的东西 VStack if imageShow Image image1 else Image image2 onTapGesture imageShow toggle 我
  • FCM 与 AWS SNS

    我在用AWS我的 android 项目的资源 我计划为我的项目添加推送通知服务AWS SNS 没有什么问题让我很困扰 我没有发现任何与这些相关的问题 除了一两个但解释不清楚的问题 1 Does AWS支持FCM SNS与 一起工作GCM 但
  • C# 从数据库中的表填充组合框

    我有一个名为的组合框combobox1 我想用它来填充它id作为价值和Name作为显示名称 我搜索并阅读了一些教程 发现此代码可在表单加载事件中使用 但它不会填充列表 我看到一个空的下拉菜单 对我错在哪里有什么想法吗 在我的数据库类中 我有
  • 使用 angular2 在同一路由器出口中加载多个组件

    我的 angular2 应用程序的根组件有以下模板