1015

我正在使用Angular,我想使用*ng如果其他(自版本4起提供)在此示例中:

<div*ngIf=“有效”>此处有内容。。。</div><div*ngIf=“!isValid”>此处的其他内容。。。</div>

我如何实现与ng如果其他?

0

25个答案25

重置为默认值
1494

角度4和5:

使用其他的:

<div*ngIf=“isValid;else other_content”>此处的内容。。。</div><ng-template#other_content>此处的其他内容</ng模板>

您也可以使用然后是其他:

<div*ngIf=“isValid;then content else other_content”>此处被忽略<ng-template#content>此处的内容</ng模板><ng-template#other_content>此处的其他内容</ng模板>

或者然后单独使用:

<div*ngIf=“isValid;then content”><ng-template#content>此处的内容</ng模板>

演示:

Plunker公司

细节:

<ng模板>:是Angular自己实现的<模板>标签,它是根据MDN:

HTML<模板>元素是保持客户端的机制加载页面时不呈现的内容,但可以随后在运行时使用JavaScript进行实例化。

13
  • 11
    我希望有一种方法可以只使用<ng-template>而不使用另一个标记(如div),但奇怪的是它不是。。。我知道<div>在使用时会被删除,但我认为它的实现有点奇怪。 评论 2017年3月30日20:03
  • 42
    @安德烈亚斯你可以用<ng控制器>对于if子句 评论 2017年6月17日11:08
  • 4
    注意:您可以使用天然气控制器用于包含*ngIf的容器,但不用于模板 评论 2018年1月18日1:32
  • @Simon_Weaver我很难找到答案。但为什么?他们为什么不允许*ng如果继续工作ng模板? 评论 2018年3月15日6:02
  • 2
    <div*ngIf=“isValid;then content else other_content”>此处被忽略。这是注射ng-模板的地方 评论 2018年4月25日19:32
268

角度4.x.x

你可以使用ng如果以四种方式实现简单如果-其他的程序:

  1. 只需使用如果

    <div*ngIf=“有效”>如果isValid为true</div>
  2. 使用如果有Else(请注意模板名称)

    <div*ngIf=“isValid;else templateName”>如果isValid为true</div><ng-template#templateName>如果isValid为false</ng-模板>
  3. 使用如果有那么(请注意模板名称)

    <div*ngIf=“isValid;then-templateName”>这里从来没有出现过</div><ng-template#templateName>如果isValid为true</ng-模板>
  4. 使用If with Then和Else

    <div*ngIf=“isValid;然后是TemplateName else elseTemplateName”>这里从来没有出现过</div><ng-template#thenTemplateName>如果isValid为true</ng-模板><ng-template#elseTemplateName>如果isValid为false</ng-模板>

提示:ng如果评估表达然后渲染然后其他的当表达式分别为true或falsy时,将模板放置在其位置。

通常情况下:

  • 然后template是的内联模板ng如果除非绑定到不同的值。
  • 其他的除非绑定,否则模板为空。
4
  • 编译器似乎不接受...; 否则。。。。可能是;应该删除。 评论 2018年2月27日15:55
  • 6
    在angular-6中,我用...; 否则。。。而且很管用 评论 2018年9月7日14:32
  • 有没有办法做if-elseif-else?
    – 第1天3
    评论 2020年7月12日7:26
  • 4比2的优势是什么?基本上,它们的结果是相同的,但不同的是,在4的情况下,我们有一个额外的<div>没有任何内容。 评论 2023年1月27日8:05
62

对于角度9/8

来源链接 带示例

导出类AppComponent{isDone=true;}

1) *ng如果

<div*ngIf=“isDone”>完成了!</div><!-- 取反运算符--><div*ngIf=“!完成”>还没有完成!</div>

2) *ngIf和Else

<ng-container*ngIf=“isDone;elseNotDone”>完成了!</ng-container><ng-template#elseNotDone>还没有完成!</ng-模板>

3) *ngIf、Then和Else

<ng容器*ngIf=“isDone;then iAmDone;else iAmNotDone”></ng-container><ng-template#iAmDone>完成了!</ng-模板><ng-template#iAmNotDone>还没有完成!</ng-模板>
2
  • 2
    问题是,哪一个更好?从性能角度来看,我怀疑第一个指令有两个指令需要独立评估,而其他两个指令只有一个。如果您在一个包含数千个元素的列表/表中使用此功能,那么它不会变慢吗? 评论 2020年11月12日17:04
  • 如果默认值不正确,则解决方案1是错误的
    – 比图
    评论 2022年5月11日15:17
50

只需添加Angular 8的新更新即可。

  1. 如果与else一起使用,我们可以使用ng如果ngIf其他.

    <ng-template[ngIf]=“condition”[ngIf-Else]=“elseBlock”>条件为true时要呈现的内容。</ng-模板><ng-template#elseBlock>条件为false时要呈现的内容。</ng-模板>
  2. 如果有,我们可以使用ng如果ngIfThen公司.

    <ng-template[ngIf]=“condition”[ngIf Then]=“then Block”>此内容从未显示</ng-模板><ng模板#thenBlock>条件为true时要呈现的内容。</ng-模板>
  3. 如果有then和else,我们可以使用ng如果,ngIfThen公司、和ngIf其他.

    <ng-template[ngIf]=“condition”[ngIf Then]=“thenBlock”[ngI fElse]=“elseBlock”>此内容从未显示</ng-模板><ng-template#thenBlock>条件为true时要呈现的内容。</ng-模板><ng-template#elseBlock>条件为false时要呈现的内容。</ng-模板>
4
  • 伟大的!我们最近转到了角度8 评论 2020年3月16日12:49
  • 1
    1不工作,我尝试将条件设为false,但它不显示模板elseBlock 评论 2021年7月23日8:26
  • @我认为你的代码有问题。如果可以,你可以给我你的代码样本。 评论 2021年7月26日4:59
  • 1
    @rosejanenomar请遵循Angular文件中的指南angular.io/api/common/NgIf
    – 黄素彬
    评论 2021年12月27日9:04
42

如果isShow为true,则执行第一行,否则执行第二行,因为elseBlockShow公司正在用作参考变量。

<div*ngIf=“isShow;else elseBlockShow”>要为If显示的文本</div><ng-template#elseBlockShow>为else块显示的文本</ng-模板>
35

为了处理可观测数据,如果可观测数组由数据组成,我通常会这样显示。

<div*ngIf=“(observable$|async)as listOfObject else emptyList”><div>....</div></div><ng-template#emptyList><div>...</div></ng-模板>
25

下面是Angular的NgIf的一些简洁的语法,并使用其他的声明。简而言之,您将声明一个元素参考号然后在其他的块:

<div*ngIf=“isLoggedIn;else loggedOut”>欢迎回来,朋友。</div><ng-template#loggedOut>请朋友登录。</ng-模板>

我从NgIf、Else、Then我发现这一点得到了很好的解释。

它还演示了如何使用<ng模板>语法:

<ng-template[ngIf]=“isLoggedIn”[ngIf-Else]=“loggedOut”><div>欢迎回来,朋友。</div></ng-模板><ng-template#loggedOut><div>请朋友登录。</div></ng-模板>

并且还使用<ng控制器>如果这就是你想要的:

<ng控制器*ngIf=“isLoggedIn;then loggedIn:else loggedOut”></ng-container><ng-template#loggedIn><div>欢迎回来,朋友。</div></ng-模板><ng-template#loggedOut><div>请朋友登录。</div></ng-模板>

来源取自这里是Angular的NgIf和Else语法.

2
  • 我不觉得只使用一行模板很好很干净 评论 2021年9月13日11:38
  • 1
    @尽管如此,这只是两种语法的示例*除非需要,否则ngIf是可行的方法。 评论 2022年2月25日12:54
14

你可以使用<ng控制器><ng模板>要实现这一点:

<ng-container*ngIf=“isValid;then template1 else template2”></ng-container><ng-template#template1>模板1包含</ng-模板><ng-template#template2>模板2包含</ng-模板>

你可以找到StackBlitz公司下面的现场演示:

现场演示

13

由于Angular 17,您可以使用内置控制流,一种可选的模板语法,用于有条件地显示、隐藏或重复元素。它允许你这样做如果不是这样如下所示:

@if(有效){此处的内容。。。}@其他{此处的其他内容。。。}

使用此语法,无需使用ng模板对于其他的案例。此外,它允许@否则,如果,这在以前是不可能的。

10
<div*ngIf=“isValid;else templateName”>如果isValid为true</div><ng-template#templateName>如果isValid为false</ng-模板>
1
9

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

<li*ngIf=“bindEmail;然后注销,否则登录”></li>注销登录
1
  • 这不起作用。如果它是正确的,那么它仍然不会增加任何价值,因为接受的答案已经显示了如何做到这一点。 评论 2017年7月23日13:18
7

您还可以使用JavaScript短三元条件运算符?角度如下:

{{doThis()?“foo”:“bar”}}

<div[ngClass]=“doThis()?'foo':'bar'”>
7

**ng如果其他**<div*ngIf=“isConditionTrue;else other_condition”>此处显示您的内容</div><ng-template#other_condition>此处的其他内容</ng模板>**ngIf然后其他**<div*ngIf=“isConditionTrue;然后content-elset-other_content”>此处被忽略</div><ng-template#content>此处的内容</ng模板><ng-template#other_content>此处的其他内容</ng模板>**ngIf那么**<div*ngIf=“isConditionTrue;then content”><ng-template#content>此处的内容</ng模板>

6

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

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

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

常见的用法是如果加载了一个对象,该对象存在,然后显示该对象的内容,否则显示“正在加载……”。

<div*ngIf=“!object”>仍在加载。。。。。。。。。。。</div><div*ngIf=“对象”><!-- 此对象的内容-->object.info,object.id,object.name。。。等。</div>

另一个例子:

事物={汽车:“本田”,鞋款:“Nike”,衬衫:“Tom Ford”,watch:“Timex”};<div*ngIf=“things.car;else noCar”>好车!</div><ng-template#noCar>叫优步。</ng-模板><!-- 好车!-->

另一个例子:

<div*ngIf=“things.car;出租汽车”>漂亮的{{汽车}}!</div><!-- 漂亮的本田!-->

ngif模板

ngif角度4

6

有两种可能使用如果HTML标记或模板的条件:

  1. *来自CommonModule的ngIf指令,位于HTML标记上;
  2. if-else公司

在此处输入图像描述

5

ng模板

<ng-template[ngIf]=“condition1”[ngIf-Else]=“template2”>...</ng-模板><ng-template#template2>...</ng-模板>
5

ngIf/Else语法

<div*ngIf=“条件;else elseBlock“>真实条件<ng-template#elseBlock>错误条件

在此处输入图像描述

使用NgIf/Else/Then显式语法

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

<div*ngIf=“条件;然后单击Block else elseBlock“></div(分频)><ng-template#thenBlock>Then模板Else模板

在此处输入图像描述

使用NgIf和异步管道的可观测值

有关更多详细信息

在此处输入图像描述

4

角度4.0如果…否则语法与Java中的条件运算符非常相似。

在Java中,您用于“条件?stmnt1:stmnt2”.

在Angular 4.0中,您使用*ngIf=“condition;then stmnt1 else stmnt2”.

4
要显示的文本<ng template#elseBlock>主文本隐藏时的备用文本</ng template>
1
  • 应该有一个解释。例如,想法/要点是什么?请回复编辑(更改)您的答案,不在评论中(没有“编辑:”、“更新:”或类似内容-答案应该像今天写的一样出现)。 评论 2021年11月3日16:41
4

Angular 17支持if、else-if和else的长等待功能。

您可以按照以下语法进行操作:

`@if(){<div>如果条件为内部</div>}@else if(){<div>内部if-else条件}@其他{<div>其他内部</div>}`

角度4、5和6

我们只需创建一个模板引用变量 2并将其链接到*ngIf指令中的else条件

可能的语法 1是:

<!-- 仅当条件--><div*ngIf=“condition”></div(分频)><!-- 或--><ng-template[ngIf]=“condition”><div></div></ng-template><!-- If和else条件--><div*ngIf=“condition;else elseBlock”></div(分频)><!-- 或--><ng-template#elseBlock></ng模板><!-- If-then-else--><div*ngIf=“condition;then then Block else elseBlock”></div><ng-template#thenBlock></ng模板><ng-template#elseBlock></ng模板><!-- If和else条件(本地存储条件值)--><div*ngIf=“condition as value;else elseBlock”>{value}}</div><ng-template#elseBlock></ng模板>

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

资料来源:

  1. NgIf-指令
  2. 模板语法
1
  • 您的答案表明它对Angular 4到6有效。2018年你写这篇文章的时候很有道理,但现在,4年后,它表明对于最新版本必须有效。我刚刚在Angular 13中使用了它,它工作得很好。您可能想考虑更新公式,使您的答案从优秀变为更好。 评论 2022年3月15日6:40
2
<div*ngIf=“this.model.SerialNumber!='';then ConnectedContent else DisconnectedContent”class=“data-font”></div>已连接断开连接
1
  • 应该有一个解释。例如,想法/要点是什么?请回复编辑(更改)您的答案,不在评论中(没有“编辑:”、“更新:”或类似内容-答案应该像今天写的一样出现)。 评论 2021年11月3日16:23
1

因此,这实际上并不是使用ng-if,但许多建议似乎都是针对在条件语句中编写文本。我认为这种方法是用最少的代码或复杂度实现这一目标的最佳方法。你是法官。

{variable==null?“Testing1”:“Testing2”}}{variable==null?var1:var2}}
0

我使用的方法是在组件中有两个标志,对应的两个标志有两个ngIf。

由于ng模板和材料不能很好地结合在一起,所以它很简单,并且与材料配合得很好。

1
  • 你能提供一个或多个代码示例?(但是没有“编辑:”、“更新:”或类似内容-答案应显示为今天写的。) 评论 2021年11月3日16:28
0

@if-else公司

在Angular的旧版本中,我们使用了*ngIf和*ngIf=“condition;else elseBlock”。

这一切在Angular 17中都得到了改善,18运行时性能提高了90%。

我们现在可以使用基本的@if语法了。

@if(已验证){<button>注销</button>}

我们也可以使用这样的if-else语法。

@if(已验证){<button>注销</button>}@其他{<button>注册</button>}

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.