【发布时间】:2017-12-09 22:16:26
【问题描述】:
目前的官方文档只展示了如何在<ng-template> 标签中动态更改组件within。 https://angular.io/guide/dynamic-component-loader
我想要实现的是,假设我有 3 个组件:header、section 和 footer,并带有以下选择器:
<app-header>
<app-section>
<app-footer>
然后有 6 个按钮可以添加或删除每个组件:Add Header、Add Section 和 Add Footer
当我点击Add Header时,页面会将<app-header>添加到呈现它的页面中,因此页面将包含:
<app-header>
然后如果我点击两次Add Section,页面现在将包含:
<app-header>
<app-section>
<app-section>
如果我点击Add Footer,页面现在将包含所有这些组件:
<app-header>
<app-section>
<app-section>
<app-footer>
是否有可能在 Angular 中实现这一点?请注意,ngFor 不是我正在寻找的解决方案,因为它只允许向页面添加相同的组件,而不是不同的组件。
编辑:ngIf 和 ngFor 不是我正在寻找的解决方案,因为模板已经预先确定。我正在寻找的是类似于components 的堆栈或components 的array,我们可以在其中轻松添加、删除和更改array 的任何索引。
编辑 2:为了更清楚,让我们再举一个例子说明为什么 ngFor 不起作用。假设我们有以下组件:
<app-header>
<app-introduction>
<app-camera>
<app-editor>
<app-footer>
现在出现了一个新组件<app-description>,用户希望将其插入到<app-editor> 之间。 ngFor 仅在我想一遍又一遍地循环使用相同的组件时才有效。但是对于不同的组件,ngFor 在这里失败。
【问题讨论】:
-
如果它们是已知的,如您的示例所示,您可以在页眉和页脚上使用 *ngIf 并在部分上使用 *ngFor。
-
@DeborahK ngIf 和 ngFor 不是我正在寻找的解决方案,因为模板已经预先确定。我正在寻找的是类似于组件堆栈或组件数组的东西,我们可以在其中轻松添加、删除和更改数组的任何索引。
-
如果您想添加不同类型的组件,这也可能会有所帮助stackoverflow.com/questions/36325212/…
-
@GünterZöchbauer 谢谢!当我了解 ngComponentOutlet 时,这可能特别有用
-
ngComponentOutlet仍然缺少一些基本功能。很久以来就有一个拉取请求来解决这些问题,但它尚未合并 AFAIK。因此从动态添加的组件读取和传递值并不能很好地工作。
标签: html angular typescript