@ContentChildren与ng-template

时间:2018-06-11 17:30:34

标签: angular

我想使用ng-template检索@ContentChildren内的组件。

参见此处的示例:

https://stackblitz.com/edit/github-ktnw8d-gaquer

我的用例如下:我有两个通用面板,必须显示在我想要使用的每个标签视图中。这些面板被包裹在一个组件中,该组件由各种其他组件调用。对于每个组件,我可以在通用组件之后添加不同的组件。为此,我需要模板的引用(TemplateRef),以及组件的引用来获取其值(TabPanel)

在stackblitz的控制台中,您可以看到变量tabPanels包含两个元素:AppComponent模板中包含的两个TabPanel,位于ng-template之外。因此,descendants属性适用于这些元素。但为什么它不适用于ng-template内注入的面板?

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

  

但是为什么它不适用于在ng-template中注入的面板?

因为模板/ ng-template元素在从其他地方显式注入或引用之前,实际上并未呈现给DOM。 ContentChildren无法在ng-template元素中看到任何内容,因为它解释了一个基本上与HTML注释相同的裸模板标签 - 没有任何内容可供阅读。

如果你想在某个地方实际渲染/注入之前对ng-template元素做东西,你需要得到' TemplateRef'元素。有几种方法可以做到这一点...我不熟悉PrimeNG,而且我并不完全清楚你正在尝试做什么(从演示代码中看不出来)所以不幸的是,很难提供更多的帮助。 :/

我稍微修改了你的代码来演示我正在谈论的内容。如果你做一个简单的ngIf =" false;否则goTemplate"为了呈现ng-template元素,ContentChildren在没有问题的情况下将其提取到bc,实际上它已经呈现给DOM。

https://stackblitz.com/edit/github-ktnw8d-fjk2mu