为了账号安全,请及时绑定邮箱和手机立即绑定

*ngIf 指令中的分号与 else 块 - Angular

*ngIf 指令中的分号与 else 块 - Angular

眼眸繁星 2023-10-30 20:26:09
最近,我在 Angular 中使用了带有 else 块的*ngIf指令,并且想知道为什么在Angular 文档中的示例使用分号 ( ),因为这似乎在没有分号的情况下也可以工作。<div *ngIf="condition; else elseBlock">Content to render when condition is true.</div>不使用分号有什么副作用吗?或者这只是一种更简洁的编码方式?
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

深谋远虑

回想起来,这是一个非常有趣的问题。实际问题<div *ngIf="condition; else elseBlock">按预期工作。但也确实如此<div *ngIf="condition else elseBlock">,那么给出什么呢?实际上需要分号是什么?

解释

事实证明,定义如何扩展的Angular微语法规范非常灵活,并且最初难以掌握。解释的要点是微语法定义的形式*ngIf[ngIf]

*:prefix="( :let | :expression ) (';' | ',')? ( :let | :as | :keyExp )*"

  • :prefix: HTML 属性键。

  • :key: HTML 属性键。

  • :local:模板中使用的局部变量名称。

  • :export:指令在给定名称下导出的值。

  • :experession:标准角度表达式

  • :keyExp = :key ":"? :expression ("as" :local)? ";"?

  • :let = "let" :local "=" :export ";"?

  • :as = :export "as" :local ";"?

看来分号是可选的。另外,在我们的例子中,else块是一个关键表达式,可以看出冒号是可选的,我们目前没有使用。所以理论上我们也可以使用<div *ngIf="condition else: elseBlock">. 因此,ngFor也可以在没有任何分号的情况下使用。所以下面的块也可以工作

<div *ngFor="let n of arr let i=index let f=first let l=last">
  {{ n }}
  </div>

工作示例:Stackblitz


查看完整回答
反对 回复 2023-10-30
?
HUX布斯

TA贡献1876条经验 获得超6个赞

仅当您使用“else”块时才需要分号。因此, <div *ngIf="condition"> (不带分号)是不使用“else”时的规范形式,但<div *ngIf="condition;">(带分号)也是有效的,并且<div *ngIf="condition; else elseBlock">是使用“else”时所需的形式。


查看完整回答
反对 回复 2023-10-30
  • 2 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信