我想使用ng-template
检索@ContentChildren
内的组件。
参见此处的示例:
https://stackblitz.com/edit/github-ktnw8d-gaquer
我的用例如下:我有两个通用面板,必须显示在我想要使用的每个标签视图中。这些面板被包裹在一个组件中,该组件由各种其他组件调用。对于每个组件,我可以在通用组件之后添加不同的组件。为此,我需要模板的引用(TemplateRef),以及组件的引用来获取其值(TabPanel)
在stackblitz的控制台中,您可以看到变量tabPanels
包含两个元素:AppComponent模板中包含的两个TabPanel,位于ng-template
之外。因此,descendants
属性适用于这些元素。但为什么它不适用于ng-template
内注入的面板?
我怎样才能做到这一点?
答案 0 :(得分:2)
但是为什么它不适用于在ng-template中注入的面板?
因为模板/ ng-template元素在从其他地方显式注入或引用之前,实际上并未呈现给DOM。 ContentChildren无法在ng-template元素中看到任何内容,因为它解释了一个基本上与HTML注释相同的裸模板标签 - 没有任何内容可供阅读。
如果你想在某个地方实际渲染/注入之前对ng-template元素做东西,你需要得到' TemplateRef'元素。有几种方法可以做到这一点...我不熟悉PrimeNG,而且我并不完全清楚你正在尝试做什么(从演示代码中看不出来)所以不幸的是,很难提供更多的帮助。 :/
我稍微修改了你的代码来演示我正在谈论的内容。如果你做一个简单的ngIf =" false;否则goTemplate"为了呈现ng-template元素,ContentChildren在没有问题的情况下将其提取到bc,实际上它已经呈现给DOM。