在新版本的 Angular V17 中,
@if
指令可以用来替代 ng-container
,这太棒了。不过,有时候*ngIf
更简洁,比如判断是否显示按钮时:
<button *ngIf="loaded">OK</button>
所以我想问一下,
*ngIf
的前景如何? Angular 会在未来的版本中完全放弃*ngIf
吗?
我们现在是否应该将
*ngIf
的所有实例替换为 @if
,即使上面的代码可能看起来不像以前那么优雅?
@if(loaded){
<button>OK</button>
}
Angular v18 现已可用,并且 控制流 稳定,所以答案是肯定的。让我们使用并享受这个新功能吧!
control_flow概念在 Angular 网站中被标记为开发者预览,这意味着:
它们功能齐全且完善,但还没有准备好 在正常的折旧政策下稳定下来。
他们还有一种有效的方法从旧模板语法迁移到 Angular v17 中引入的新语法
现在让我们回到您的问题:
*ngIf
的所有实例替换为 @if
?我建议等待几个月,让 Angular 团队正式指定此功能为稳定版本。一旦确认,您可以确保无需返工,特别是如果您正在从事大型项目。
*ngIf
吗?虽然 Angular 团队还没有正式稳定
,但最终的答案仍然不确定。然而,就我个人而言,我会说不。即使他们将旧语法标记为已弃用,它仍然应该可用,因为采用这种格式的应用程序很流行。此外,无需担心从旧语法迁移到新语法,因为您可以通过运行以下命令轻松完成它。control_flow
ng g @angular/core:control-flow
旁注: 通过使用
@If
,您可以摆脱使用 ng-template
,这确实是很棒的功能。看这个例子:
<div *ngIf="loggedIn; else anonymousUser">
The user is logged in
</div>
<ng-template #anonymousUser>
The user is not logged in
</ng-template>
使用内置的 if 语句,此条件将如下所示:
@if (loggedIn) {
The user is logged in
} @else {
The user is not logged in
}