【发布时间】:2019-03-07 01:38:30
【问题描述】:
我有一个第 3 方库组件,我试图通过在某个点添加一些额外的标记来自定义它。我正在使用结构指令来执行此操作,目前我正在使用渲染器以编程方式添加和样式化节点,如下所示:
const headerDiv = this.newDiv();
el = this.nativeElement.querySelector('div.ui-dropdown-items-wrapper');
this.renderer.appendChild(el, this.renderer.createText('sometext'));
private newDiv(): Element {
return this.renderer.createElement('div');
}
标记是这样的:
<div #containerDiv>
<child-component *myStructuralDirective>
</child-component>
</div>
有没有办法直接在父组件的标记中定义<ng-template> 并使用渲染器在某个点注入它?像这样的:
<div #containerDiv>
<child-component *myStructuralDirective>
</child-component>
</div>
<ng-template #footer>
<p>Some other markup</p>
</ng-template>
然后在我选择的某个点将#footer 的内容注入到子组件中。注意 - 我无法访问孩子,因为它是已编译的第 3 方库。
我想看看是否有更好的方法将标记定义为模板变量,我可以在我的结构指令中使用,访问该模板并在某个点将其注入子组件。
编辑 -
我正在查看ViewContainerRef.insert,不幸的是,这只能根据其他ViewRefs 的位置插入模板。由于我无法更改第 3 方组件的标记,我可以定义一个 ng-container 来标记插入点,并且只需要使用 CSS 选择器。不确定是否有办法根据元素位置插入模板。我知道这是 2 个离散的概念(Angular View 抽象与直接 DOM 插入),所以我不乐观这可以做到!
【问题讨论】:
标签: angular