如何在由 *ngIf 控制的同一模板中包含两个 ng-contents

How can I have two ng-contents in the same template controlled by *ngIf

我有一个 angular 2 组件用于显示 bootstrap 3 按钮组。组件可以有标签,也可以独立。

我的解决方案是使用两个由 *ngIf 控制的 ng-contents,但是,它拒绝显示任何一个 ng-contents 并且不会引发错误。

这是 btn-multi.html:

<div class="form-group"
     *ngIf="label">
    <label class="control-label col-lg-2 col-md-3">
        {{ label }}
    </label>

    <div class="col-lg-10 col-md-9">
        <div class="btn-group">
            <ng-content></ng-content>
        </div>
    </div>
</div>

<div class="btn-group"
     *ngIf="!label">
    <ng-content></ng-content>
</div>

这是它的用法:

<btn-multi label="Some Label"
           [(value)]="someValue">
   <btn [value]="true">Yes</btn>
   <btn [value]="false">No</btn>
</btn-multi>

这是它只使用一个 ng-content:

我目前正在使用 angular 2 beta-15。

谢谢!

NgIf 妨碍了包含内容,因为 ng-contentNgIf 被评估后呈现。

你需要采取另一种方法,可能是这样的:

<div [ngClass]="{'form-group': label}">
  <label *ngIf="label" class="control-label col-lg-2 col-md-3">
    {{ label }}
  </label>

  <div [ngClass]="{'col-lg-10 col-md-9': label}">
    <div class="btn-group">
        <ng-content></ng-content>
    </div>
  </div>
</div>

还有更好的方法,这完全取决于您希望如何使用此组件。

仅供参考,只是即时执行此操作,因此未经过测试,只是为了给您一个大概的想法。