【发布时间】:2016-10-04 17:18:20
【问题描述】:
所以这就是交易。我有一个写得很好并且在很多地方都使用的组件。现在我需要使用相同的组件,但希望根据条件呈现不同的模板。
我尝试了很多。
1) 尝试使用多个组件装饰器 - 不走运
2) 尝试了多层次的抽象,我最终创建了更多的组件 - 坏主意
3) 可以从字面上复制整个组件,只需更改选择器和模板 - 坏主意
4) 目前我正在尝试这个:
<div *ngIf="!isWizard">
<ul class="nav" role="tablist">
<ng-content select="tab-link"></ng-content>
</ul>
<ng-content select="tab-content"></ng-content>
</div>
<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>
</ul>
</nav>
<main class="settings-panel content-area">
<ng-content select="tab-content"></ng-content>
</main>
</div>
我将 isWizard 属性设置为真/假。 现在的问题是,ng-content 只运行一次。所以当 isWizard 为真时,即使显示了 div 块,ng-content 也不会运行(因为它在上面的块中运行)。
5) 我也尝试了 ngSwitch 而不是使用 ngIf - 没用
我现在很绝望。请帮忙:)
【问题讨论】:
-
您使用的是什么 Angular2 版本。据我记得这是最近修复的一个问题。不确定此修复程序是否已包含在 RC.1 中
-
@GünterZöchbauer 我正在使用 2.0.0-rc.1,但不起作用。
-
建议下次更新后再试。上一次更新是很久以前的事了,那个修复不是很久以前,不记得确切但我很确定它解决了这个问题。
-
@GünterZöchbauer 我找不到确切的链接,但我在某个地方发现 ng-content 应该只运行一次,这就是它的开发方式。所以这就是我依赖 ngIf 和 ngSwitch 的原因(所以 ngContent 运行一次),但即使这些也不起作用。
-
计划对此要求提供更好的支持,看起来 Material 组件也需要它。
标签: angular angular2-template angular2-directives