angular2中的ng-if和*ng-if有什么区别

What is the difference between ng-if and *ng-if in angular2

我想了解 ng-if*ng-if 之间的区别,但我觉得它们是一样的。

我应该牢记选择一个而不是另一个以及何时使用这些指令有什么区别吗?

ngIf 是指令。因为它是结构指令(基于模板),所以您需要使用 * 前缀才能将其用于模板。

*ngIf 对应于以下语法的快捷方式 ("syntactic sugar"):

<template [ngIf]="condition">
  <p>
    Our heroes are true!
  </p>
</template>

相当于:

<p *ngIf="condition">
  Our heroes are true!
</p>

有关详细信息,请参阅此文档:

区别在于 Angular2 不支持这两者 ;-) 至少在当前版本中 - 它应该是 *ngIfngIf.

结构指令可以与显式 <template> 标签或隐式 <template> 标签一起使用。对于隐式版本,需要 * 来指示它是结构指令。

明确

<template [ngIf]="someExpr">
   <div>content</div>
</template>

或从 2.0.0 开始首选

<ng-container *ngIf="someExpr">
   <div>content</div>
</ng-container>

隐式

<div *ngIf="someExpr"></div>

通常你会使用隐式版本,因为它更简洁。

什么时候使用显式版本?

有些用例中隐式版本不起作用。

  • 如果您想应用多个结构指令,例如 ngFor ngIf 不受支持,那么您可以使用显式形式其中之一。

而不是这个无效的语法

<div *ngFor="let item of items" *ngIf="!item.hidden"></div>

你可以使用

<ng-container *ngFor="let item of items">
  <div *ngIf="!itemHidden></div>
</ng-container>
  • 如果要将结构指令应用于多个元素

例如,您想要列出多个项目,每行 nameprice

<tr>
  <td *ngFor="???">item.name</td>
  <td>item.price</td>
</tr>

<tr>
  <ng-container *ngFor="let item of items">
    <td>item.name</td>
    <td>item.price</td>
  </ng-container>
</tr>

为简单起见,在最新的 angular 版本中,例如当我们像下面这样使用 *ngIf 时。

<div *ngIf = "condition">
//code here
</div>

现在,上面的代码实际上由angular渲染如下:

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

因此我们可以直接使用 *ngIf 作为结构指令,或者我们可以使用 [ngIf] 作为属性指令但使用 ng-template。希望这能让事情更清楚。

目前 Angular 我们使用 ngIf 而不是 ng-if 所以考虑到这里的差异我们可以这样实现它: 如果是 *ngIf - <div *ngIf="condition">Content to render when condition is true.</div>

如果是 ngIf - <ng-template [ngIf]="condition"><div>Content to render when condition is true.</div></ng-template>

您可以在 angular.io>API 参考文献

中找到详细信息