【问题标题】:Why ng-container showing my td tag and template element does not showing my td tag?为什么显示我的 td 标签和模板元素的 ng-container 不显示我的 td 标签?
【发布时间】:2018-02-26 16:25:48
【问题描述】:

如果我的陈述属实,我想显示td 标签。所以我使用<template> 元素来检查这种情况。 但在渲染屏幕后,我在template 元素中看不到td 标记。

<table class="ui-grid-row ui-row" style="width:100%; table-layout:fixed" cellspacing="0">
  <tr style="width:100%">
    <td style="width:5%" class="ui-border" [ngClass]="{ odd: odd, even: even }">{{datavalue.FieldPrefix}}</td>
    <td style="width:30%" class="ui-border" [ngClass]="{ odd: odd, even: even }">{{datavalue.FieldName}}</td>

    **//here am using template element**
    <template *ngIf="datavalue.IsOverridable">
                                        <td style="width:59%" class="ui-border" [ngClass]="{ odd: odd, even: even, highlight:datavalue.IsMandatoryElementDataMissing}"
                                            (click)="AddNewDialog(datavalue)">
                                            <span *ngIf="!datavalue.IsMultiRowExist" [innerHTML]="datavalue.FieldValueCobmination==null?'':datavalue.FieldValueCobmination"></span>
                                            <span class="grid leftalign" *ngIf="datavalue.IsMultiRowExist"><img class="image" title="Multi Line" src="assets/images/MultiLine.png" /></span>
                                        </td>
                                    </template>


  </tr>
</table>

但如果我使用 &lt;ng-container&gt; 元素而不是 &lt;template&gt; 元素,它可以正常工作。

<table class="ui-grid-row ui-row" style="width:100%; table-layout:fixed" cellspacing="0">
  <tr style="width:100%">
    <td style="width:5%" class="ui-border" [ngClass]="{ odd: odd, even: even }">{{datavalue.FieldPrefix}}</td>
    <td style="width:30%" class="ui-border" [ngClass]="{ odd: odd, even: even }">{{datavalue.FieldName}}</td>


    **//here am using ng-container element**
    <ng-container *ngIf="datavalue.IsOverridable">
      <td style="width:59%" class="ui-border" [ngClass]="{ odd: odd, even: even, highlight:datavalue.IsMandatoryElementDataMissing}" (click)="AddNewDialog(datavalue)">
        <span *ngIf="!datavalue.IsMultiRowExist" [innerHTML]="datavalue.FieldValueCobmination==null?'':datavalue.FieldValueCobmination"></span>
        <span class="grid leftalign" *ngIf="datavalue.IsMultiRowExist"><img class="image" title="Multi Line" src="assets/images/MultiLine.png" /></span>
      </td>
    </ng-container>


  </tr>
</table>

问题:-

  • 为什么ng-container 确实显示了我的td 标记,而template 元素没有显示我的td 标记?

  • 说明我什么时候会使用ng-template 而不是ng-container?

【问题讨论】:

  • 我知道template 是tr 标签中的无效元素。
  • @SankarRaj 那么将 ng-template 放入 tr 标签呢?
  • 它将由角度来处理...模板是角度指令吗?如果我错了,请纠正我。
  • 模板如果不是角度指令。它的 html 标记阻止在浏览器中呈现它,但您可以通过 javascript 呈现它:-)

标签: javascript html angular angular2-template ng-container


【解决方案1】:

你应该像这样使用ng-template

<ng-template [ngIf]="condition"><div>...</div></ng-template>

与ng-container 的区别在于,您可以使用像*ngFor 这样的指令,它需要模板但不会在html 中创建任何内容。

<ng-container *ngFor="let item of items">{{item }}</ng-container>

但是当你使用ng-template 时,你需要写成完整的形式

<ng-template ngFor let-item [ngForOf]="items" let-i="index" 
   [ngForTrackBy]="trackByFn">
  <li>...</li>
</ng-template>

另见

【讨论】:

  • 但是和我的问题有什么关系?
  • 并解释一下我什么时候会使用 ng-template 而不是 ng-container?
  • 但是我不知道,为什么我在模板元素中看不到我的 td 标签?
  • 更新了答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 2014-11-17
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
相关资源
最近更新 更多