如何使用* ng


631

我正在使用Angular,并且想*ngIf else在此示例中使用(自版本4起可用):

<div *ngIf="isValid">
  content here ...
</div>

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

如何实现相同的行为ngIf else


1
检查这里的角8例NgIf,NgIf else和NgIf然后否则解释freakyjolly.com/...
代码间谍

Answers:


980

角度4和5

使用else

<div *ngIf="isValid;else other_content">
    content here ...
</div>

<ng-template #other_content>other content here...</ng-template>

您还可以使用then else

<div *ngIf="isValid;then content else other_content">here is ignored</div>    
<ng-template #content>content here...</ng-template>
<ng-template #other_content>other content here...</ng-template>

then单独:

<div *ngIf="isValid;then content"></div>    
<ng-template #content>content here...</ng-template>

演示:

柱塞

细节:

<ng-template>:是Angular自己<template>根据MDN实现的标签实现:

HTML <template>元素是一种用于保存客户端内容的机制,该内容在页面加载时不会呈现,但随后可以在运行时使用JavaScript实例化。


8
我希望有一种方法可以仅使用<ng-template>而不使用诸如div之类的其他标签,但是奇怪的是它不是...我知道<div>在您使用它时会被删除,但是我认为这有点奇怪。
安德烈亚斯(Andreas)

20
@andreas您可以使用<ng-container>if子句
Martin Schneider

2
注意:您可以ng-container将容器用于包含* ngIf的容器,但不能用于模板
Simon_Weaver

@Simon_Weaver我想通了。但为什么?他们为什么不允许*ngIf 继续工作ng-template
伊兰·麦丹

<div * ngIf =“ isValid;然后忽略其他内容other_content”>此处被忽略</ div>,不会被忽略。它是放置ng模板的地方
dimson d 18-4-25

185

在Angular 4.xx中, 您可以通过四种方式使用ngIf来实现简单的if else过程:

  1. 只是使用如果

    <div *ngIf="isValid">
        If isValid is true
    </div>
    
  2. 在其他情况下使用If(请注意templateName

    <div *ngIf="isValid; else templateName">
        If isValid is true
    </div>
    
    <ng-template #templateName>
        If isValid is false
    </ng-template>
    
  3. If与Then一起使用(请注意templateName

    <div *ngIf="isValid; then templateName">
        Here is never showing
    </div>
    
    <ng-template #templateName>
        If isValid is true
    </ng-template>
    
  4. If与Then和Else一起使用

    <div *ngIf="isValid; then thenTemplateName else elseTemplateName">
        Here is never showing
    </div>
    
    <ng-template #thenTemplateName>
        If isValid is true
    </ng-template>
    
    <ng-template #elseTemplateName>
        If isValid is false
    </ng-template>
    

提示:ngIf会对表达式求值,然后 在表达式分别为真或假时分别渲染thenelse模板。通常是:

  • 那么除非绑定到其他值,否则template是ngIf的内联模板。
  • 否则,除非绑定模板,否则模板为空白。

似乎编译器不接受...; else ...。可能;应该删除。
slartidan

5
在angular-6中,我进行了测试...; else ...并成功运行
WasiF

20

为了使用可观察的对象,如果可观察的数组包含数据,这就是我通常要显示的内容。

<div *ngIf="(observable$ | async) as listOfObject else emptyList">
   <div >
        ....
    </div>
</div>
 <ng-template #emptyList>
   <div >
        ...
    </div>
</ng-template>

8

“ bindEmail”,它将检查电子邮件是否可用。如果存在电子邮件,则显示“注销”,否则显示“登录”

<li *ngIf="bindEmail;then logout else login"></li>
<ng-template #logout><li><a routerLink="/logout">Logout</a></li></ng-template>
<ng-template #login><li><a routerLink="/login">Login</a></li></ng-template>

2
这行不通。如果正确,那么它仍然不会添加任何值,因为接受的答案已经显示了操作方法。
君特Zöchbauer

8

您可以使用<ng-container><ng-template>实现此目的

<ng-container *ngIf="isValid; then template1 else template2"></ng-container>

<ng-template #template1>
     <div>Template 1 contains</div>
</ng-template>

<ng-template #template2>
     <div>Template 2 contains </div>
</ng-template>

您可以在下面找到Stackblitz Live演示

现场演示

希望这会有所帮助... !!!


8

对于Angular 9/8

带有示例的链接

    export class AppComponent {
      isDone = true;
    }

1)* ngIf

    <div *ngIf="isDone">
      It's Done!
    </div>

    <!-- Negation operator-->
    <div *ngIf="!isDone">
      It's Not Done!
    </div>

2)* ngIf和其他

    <ng-container *ngIf="isDone; else elseNotDone">
      It's Done!
    </ng-container>

    <ng-template #elseNotDone>
      It's Not Done!
    </ng-template>

3)* ngIf,Then和Else

    <ng-container *ngIf="isDone;  then iAmDone; else iAmNotDone">
    </ng-container>

    <ng-template #iAmDone>
      It's Done!
    </ng-template>

    <ng-template #iAmNotDone>
      It's Not Done!
    </ng-template>

这仅是重复已经接受的答案的内容
phil294

6

ngIf / Else的语法

<div *ngIf=”condition; else elseBlock”>Truthy condition</div>
<ng-template #elseBlock>Falsy condition</ng-template>

在此处输入图片说明

使用NgIf / Else / Then显式语法

要添加然后模板,我们只需要将其显式绑定到模板即可。

<div *ngIf=”condition; then thenBlock else elseBlock”> ... </div> 
<ng-template #thenBlock>Then template</ng-template>
<ng-template #elseBlock>Else template</ng-template>

在此处输入图片说明

NgIf和异步管道的可观察对象

更多细节

在此处输入图片说明


6

只需从Angular 8中添加新更新即可。

  1. 对于else的情况,我们可以使用ngIfngIfElse
<ng-template [ngIf]="condition" [ngIfElse]="elseBlock">
  Content to render when condition is true.
</ng-template>
<ng-template #elseBlock>
  Content to render when condition is false.
</ng-template>
  1. 对于then的情况,我们可以使用ngIfngIfThen
<ng-template [ngIf]="condition" [ngIfThen]="thenBlock">
  This content is never showing
</ng-template>
<ng-template #thenBlock>
  Content to render when condition is true.
</ng-template>
  1. 对于then和else的情况,我们可以使用ngIfngIfThenngIfElse
<ng-template [ngIf]="condition" [ngIfThen]="thenBlock" [ngIfElse]="elseBlock">
  This content is never showing
</ng-template>
<ng-template #thenBlock>
  Content to render when condition is true.
</ng-template>
<ng-template #elseBlock>
  Content to render when condition is false.
</ng-template>

大!我们最近移至8
号角


5

ngif表达式的结果值不只是布尔值true或false

如果表达式只是一个对象,它仍然将其评估为真实性。

如果对象未定义或不存在,则ngif会将其评估为假。

常用的是如果一个对象已加载,存在,则显示该对象的内容,否则显示“正在加载....”。

 <div *ngIf="!object">
     Still loading...........
 </div>

<div *ngIf="object">
     <!-- the content of this object -->

           object.info, object.id, object.name ... etc.
 </div>

另一个例子:

  things = {
 car: 'Honda',
 shoes: 'Nike',
 shirt: 'Tom Ford',
 watch: 'Timex'
 };

 <div *ngIf="things.car; else noCar">
  Nice car!
 </div>

<ng-template #noCar>
   Call a Uber.
</ng-template>

 <!-- Nice car ! -->

以前的例子:

<div *ngIf="things.car; let car">
   Nice {{ car }}!
 </div>
<!-- Nice Honda! -->

ngif模板

ngif角4


5

ng-template

<ng-template [ngIf]="condition1" [ngIfElse]="template2">
        ...
</ng-template>


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

3

如果对HTML标签或模板有条件,则可以使用两种可能性:

  1. HTML标记上的* ngIf来自CommonModule的指令;
  2. 如果别的

在此处输入图片说明


1
<div *ngIf="this.model.SerialNumber != '';then ConnectedContent else DisconnectedContent" class="data-font">    </div>

<ng-template #ConnectedContent class="data-font">Connected</ng-template>
<ng-template #DisconnectedContent class="data-font">Disconnected</ng-template>

1

在Angular 4、5和6中

我们可以简单地创建一个模板引用变量 [2]并将其链接到* ngIf指令内的else条件。

可能的语法 [1]为:

<!-- Only If condition -->
<div *ngIf="condition">...</div>
<!-- or -->
<ng-template [ngIf]="condition"><div>...</div></ng-template>


<!-- If and else conditions -->
<div *ngIf="condition; else elseBlock">...</div>
<!-- or -->
<ng-template #elseBlock>...</ng-template>

<!-- If-then-else -->
<div *ngIf="condition; then thenBlock else elseBlock"></div>
<ng-template #thenBlock>...</ng-template>
<ng-template #elseBlock>...</ng-template>


<!-- If and else conditions (storing condition value locally) -->
<div *ngIf="condition as value; else elseBlock">{{value}}</div>
<ng-template #elseBlock>...</ng-template>

演示: https : //stackblitz.com/edit/angular-feumnt? embed =1& file = src/app/ app.component.html

资料来源:

  1. https://angular.io/api/common/NgIf#syntax
  2. https://angular.io/guide/template-syntax#template-reference-variables--var-


0

我知道已经有一段时间了,但是如果有帮助,请添加它。我使用的方法是在组件中具有两个标志,并为对应的两个标志提供两个ngIfs。

它很简单,并且可以与材质很好地一起工作,因为ng模板和材质不能很好地协同工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.