【发布时间】:2018-08-11 07:25:52
【问题描述】:
如何动态添加组件?
toolbar.component.ts:
@Component({
selector: 'app-toolbar',
template: '<button>Add Text component</button>'
})
export class ToolbarComponent {
constructor() { }
}
section.component.ts:
@Component({
selector: 'div[app-type=section]',
template: ''
})
export class SectionComponent {
constructor() { }
}
text.component.ts:
@Component({
selector: 'app-text',
template: '<p>This is dynamically component</p>'
})
export class TextComponent {
constructor() { }
}
view.component.ts:
@Component({
selector: 'app-view',
template: `<div class="container">
<app-toolbar></app-toolbar>
<div app-type="section" id="SECTION1" class="active"></div>
<div app-type="section" id="SECTION2"></div>
</div>`
})
export class SectionComponent {}
当我点击 ToolBarComponent 时,我想将 TextComponent 添加到具有“活动”类的 SectionComponent。
【问题讨论】:
-
创建一个包含主题(或 BehaviourSubject)的服务,在 ToolbarComponent 中通过点击事件创建 Observable,从服务订阅和
next到该主题。在添加类active的地方,next到服务中的其他主题(刚才next的值是对该元素/组件的引用),因此您不需要查询 DOM。在 ViewComponent 中使用componentFactoryResolver动态创建组件。通过ng-template订阅主题和附加组件并添加指令。您可能可以动态创建ng-template somedirectiveRef,而不是在每个 HTML 中 -
你能帮我一个完整的答案吗?请。实际上“活动”类不是必需的,我确实想将组件添加到屏幕上最可见的部分。 :D - 喜欢这个问题:stackoverflow.com/questions/38360676/…
-
请出示您更新后的代码。如果不需要动态占位符 - 只需在 HTML 中进行硬编码 -
<div app-type="section" id="SECTION1" class="active"> <ng-template myDirectiveThatReferencesTemplateComponentForInsertion></ng-template></div>
标签: angular components angular-services viewchild