基于条件的一个组件多个模板 [英] One Component Multiple Templates based on Condition

查看:26
本文介绍了基于条件的一个组件多个模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以这就是交易.我有一个组件写得很好,并在很多地方使用.现在我需要使用相同的组件,但希望根据条件呈现不同的模板.

我尝试了很多.

1) 尝试使用多个组件装饰器 - 没有运气

2) 尝试了多层次的抽象,我最终创建了更多的组件 - 坏主意

3) 可以从字面上复制整个组件,只需更改选择器和模板 - 坏主意

4) 目前我正在尝试这个:

<ul class="nav" role="tablist"><ng-content select="tab-link"></ng-content><ng-content select="tab-content"></ng-content>

<div *ngIf="isWizard"><nav class="nav-panel sidenav"><ng-content select=".wizard-title"></ng-content><ul class="nav" role="tablist"><ng-content select="tab-link"></ng-content></nav><main class="settings-panel content-area"><ng-content select="tab-content"></ng-content></main>

我将 isWizard 属性设置为 true/false.现在的问题是,ng-content 只运行一次.所以当 isWizard 为 true 时,即使显示了 div 块,ng-content 也不会运行(因为它在上面的块中运行).

5) 而不是使用 ngIf 我也试过 ngSwitch - 没用

我现在很绝望.请帮忙:)

解决方案

据我所知,使用 ng-content 无法实现,但您可以使用 templates 实现>(或 Angular 4+ 中的 ng-templates).因此,与其将内容直接传递给您的组件,不如将其包装在