2017-03-03 69 views
0

相关联的名字说我有这个模板:检索变量与TemplateRef

<div class="main__container"> 
    <ng-template #test></ng-template> 
    <ng-template #test2></ng-template> 
</div> 

我检索通过引用的所有TemplateRef

@ViewChildren(TemplateRef) 
private templates; 

哪有我,对所有的人,检索关联变量的名称?因此,为第一个模板“测试”,为另一个模板测试“test2”。如果可以使用ng-template的属性,我不是绝对想要使用变量,这是可以的。我尝试了TemplateRef,ViewContainerRefElementRef,但每次都会返回对comment元素的引用。

回答

0

您可以通过名字,要求他们按如下方式访问模板变量:

@ViewChildren('test, test2') templates; 

下面是一个简单Plunker证明的行为。

+0

是的我知道这一点,但我希望我的组件更通用。我希望能够根据需要放置尽可能多的'ng-template'并在代码中检索它们。但是,我还需要一种方法来识别它们,因为我有一个像我想用来做某些事情的'{test:{...},test2:{...}}'这样的json对象。 – ssougnez

+0

您无法动态添加模板变量,因此永远不会超过那些创建设计时间的模板变量。既然你可以通过名字引用它们并使用预定义的名称访问对象中的数据,那么就是这种情况。 –

+0

我不想动态添加模板变量。我想要的可以通过两种方式实现:或者能够从我的模板动态检索变量,比如'ViewChildren',但是在运行时(类似于'let tpl:TemplateRef = this.viewChildren.get(name);') ,或者能够从模板中检索所有'ng-template'元素并且有一种方法来获取附加到它们的变量的名称。 – ssougnez