Angular 动态组件:动态插入X类型的组件

Angular 动态组件:动态插入X类型的组件,angular,typescript,dynamic,binding,load,Angular,Typescript,Dynamic,Binding,Load,有两件事我想实现。两者都需要巧妙地使用组件 首先,一个关于组件绑定的问题:在我所看到的每一篇文章中,模板中都使用了一个指令标记,以便以后绑定组件。然而,由于我的两个问题,我不能预先将指令放入模板中,而是需要动态地这样做 我有一张“事情”的清单。然而,“事物”只是父对象,它有很多子对象——这意味着有多种类型的事物,每种都有不同的价值。这让我为每件事都创建了一个组件:每个组件都有自己的模板。 但是,我还想显示这些内容的列表。不过,我事先并不知道它们:我正在从服务器获取它们。在得到数据之前,我不知道它

有两件事我想实现。两者都需要巧妙地使用组件

首先,一个关于组件绑定的问题:在我所看到的每一篇文章中,模板中都使用了一个指令标记,以便以后绑定组件。然而,由于我的两个问题,我不能预先将指令放入模板中,而是需要动态地这样做

  • 我有一张“事情”的清单。然而,“事物”只是父对象,它有很多子对象——这意味着有多种类型的事物,每种都有不同的价值。这让我为每件事都创建了一个组件:每个组件都有自己的模板。 但是,我还想显示这些内容的列表。不过,我事先并不知道它们:我正在从服务器获取它们。在得到数据之前,我不知道它们的类型或数量。现在我想通过每次添加一个正确类型的组件来列出每个“东西”。如何正确添加绑定以动态加载组件

  • 我的用户可以通过使用不同的模态来“设计”他们的个人资料。生成的布局是从服务器获取的。也就是说,我事先不知道情态动词的数量或类型。我现在如何才能正确地包含它们


  • TL;DR我如何动态绑定组件,而不必为其各自的类型设置适当数量的绑定?

    当组件信息来自服务器时,您可以做一件事:

    您仍然需要将所有组件放入父模板中,但只显示服务器返回的内容:

    <div *ngFor="let dynamic of fromServer" [ngSwitch]="dynamic .id">
          <thing-a *ngSwitchCase="'thinga'" [data]="dynamic"></thing-a>
          <thing-b *ngSwitchCase="'thingb'" [data]="dynamic"></thing-b>
          <thing-c *ngSwitchCase="'thingc'" [data]="dynamic"></thing-c>
          <thing-d *ngSwitchCase="'thingd'" [data]="dynamic"></thing-d>
          <thing-e *ngSwitchCase="'thinge'" [data]="dynamic"></thing-e>
          <thing-f *ngSwitchCase="'thingf'" [data]="dynamic"></thing-f>
    </div>
    
    [
       { id : "thinga" }
       { id : "thingd" }
       { id : "thingf" }
    
    ]
    
    然后只显示这3个

    您还可以根据服务器返回数据的顺序对组件进行动态排序

    编辑:

    如果服务器返回
    thinga
    3次,将显示3次

    编辑2: 例如:


    每个
    thinga
    组件都将获得自己的数据,而您却没有,因为没有办法。包含一段代码,演示如何强制读取和写入值。我不知道你说的2是什么意思。您需要向应用程序静态添加组件。组件不知道您何时构建的应用程序无法添加。@GünterZöchbauer感谢您的回复。然而,人们将如何着手解决我目前面临的问题呢?大约2:我会在一分钟内编辑,让它更清楚。另外:并不是Angular不知道我要添加的组件,而是我事先定义了它们。我只是不知道应该事先使用哪些组件。所以,基本上:我定义了组件X,Y,Z。服务器现在告诉我“将X,Z,X,X,Y,Z,Y按照我给你的值的顺序放在列表中”。这就是我在第一条评论中链接到的答案。非常感谢你的回答。若一件东西显示了3次,它会显示不同的数据吗?如果是这样,这可能会以一种超级简单的方式解决我所有的问题!太棒了,非常感谢你。这正是我想要的,而且非常简单。我很快就会试试的。
    [
       { id : "thinga", title: "Yes"}
       { id : "thinga", title: "No" }
       { id : "thinga", title: "Maybe" }
    ]