为什么使用ng-template而不是* ngIf

时间:2019-03-09 01:29:56

标签: angular

任何使用理由:

<div *ngIf="show; else notShow">content</div>
<ng-template #notShow>other content...</ng-template>

代替:

<div *ngIf="show">content</div>
<div *ngIf="!show">other content...</div>

1 个答案:

答案 0 :(得分:3)

纯粹是语义。这两个示例之间没有性能优势。因此,使用哪一个都没关系。这里的主要区别在于 else 语法是过程性的。您可以引用名为notShow的组件属性,这是您在运行时创建的模板。您只是使用简写引用#notShow在当前模板中使用<ng-template>

这是*ngIf的源代码:

private _updateView() {
  if (this._context.$implicit) {
    if (!this._thenViewRef) {
      this._viewContainer.clear();
      this._elseViewRef = null;
      if (this._thenTemplateRef) {
        this._thenViewRef =
            this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
      }
    }
  } else {
    if (!this._elseViewRef) {
      this._viewContainer.clear();
      this._thenViewRef = null;
      if (this._elseTemplateRef) {
        this._elseViewRef =
            this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
      }
    }
  }
}

this._context.$implicit是模板中的条件表达式。

无论哪种情况,无论如何都将调用this._viewContainer.clear()。因此,在您的示例中我看不到性能差异。