如何在Angular中有条件地用不同的div包装元素

Posted

技术标签:

【中文标题】如何在Angular中有条件地用不同的div包装元素【英文标题】:How to wrap a element by different div conditionally in Angular 【发布时间】:2020-11-06 19:40:14 【问题描述】:

假设我有一个元素树,我想根据条件将它包装在不同的 div 中 例如。

//condition == 1
<div class="condition1" condition1Directive>
   <div> ... </div>   //same content
</div>

//condition == 2
<div class="condition2">
   <div> ... </div>   //same content
</div>

我想在 Angular 中找到最优雅、最有效的方法。 谢谢

【问题讨论】:

只是包装div的类属性发生变化还是可以是任何其他元素? 没有。我已经更新了我的问题。我想有一些特别是 div 的指令。 您是说如果condition1 使用一个指令,如果condition2 使用另一个指令?对你的最终目标有点困惑。我认为*ngIf 是你想要的,但我不太清楚你想要达到什么目的。 我的实际情况是在条件1中使用指令,在条件2中没有指令 这是一个有趣的问题。你能详细解释一下,这两个条件是什么?为什么只通过指令?你最终的确切结果是什么? 【参考方案1】:

如果您只想将具有不同样式属性的 div 包含在内,您可以使用 ngClass

<div [ngClass]="'condition1': condition === 1, 'condition2': condition === 2"> 


<div> ... </div>   //same content

</div>

对于使用条件指令,您可以执行以下操作:

 <ng-container *ngTemplateOutlet="condition1 === true ? template1 : template2">

<ng-template #template1 directive> <ng-template>

<ng-template #template2></ng-template>

【讨论】:

对不起,我应该更清楚我的问题。我已经更新了它,实际上我想有一些特别是 div 的指令。【参考方案2】:

对父 div 使用 *ngIf,如有必要,将相同的内容 div 提取到 ng-template 或组件中。

您可以查看此线程以获取更多详细信息:

Apply a directive conditionally

<div *ngIf="isCondition1" condition1Directive>
  <sameContentComponent></sameContentComponent>
</ng-container>

<div *ngIf="!isCondition1">
  <sameContentComponent></sameContentComponent>
</ng-container>

【讨论】:

【参考方案3】:

你可以这样做..

案例 1

<div *ngIf="condition1" class="condition1" condition1Directive>
   <div> ... </div>   //same content
</div>

<div *ngIf="condition2" class="condition2">
   <div> ... </div>   //same content
</div>

案例 2

<div [ngClass]="condition1 == true ? 'condition1' : 'condition2'" condition1Directive>
   <div> ... </div>   //same content
</div>

【讨论】:

以上是关于如何在Angular中有条件地用不同的div包装元素的主要内容,如果未能解决你的问题,请参考以下文章

如何将不同的模板变量传递给angular2中的一个按钮?

在Angular2中有条件地分配类[重复]

如何在 Angular 8 中有条件地加载两个子组件

如何防止Ajax元素包装?

我有一个相互重叠的 flex 包装 div 容器。这些可能是不同的高度并包裹多次。如何避免重叠?

Angular 2:如何有条件地应用属性指令?