Angular V17:@if 与 *ngIf 的前景 – *ngIf 将来会被弃用吗?

lon*_*tly 8 html if-statement angular angular17

在新版本的 Angular V17 中,该@if指令可以用来替代ng-container,这真是太棒了。不过,有时*ngIf更简洁,比如判断是否显示按钮时:

<button *ngIf="loaded">OK</button>
Run Code Online (Sandbox Code Playgroud)

所以我想问一下,前景如何*ngIf*ngIfAngular 会在未来的版本中完全放弃吗?

即使上面的代码看起来不像以前那么优雅,我们是否应该*ngIf用now 替换所有实例?@if

@if(loaded){ 
    <button>OK</button>
}
Run Code Online (Sandbox Code Playgroud)

Ali*_*adi 0

该概念在 Angular网站control_flow中被标记为开发者预览版,这意味着:

它们功能齐全且经过完善,但尚未准备好在正常的弃用政策下稳定下来。

此外,他们还有一种从旧模板语法迁移到 Angular v17 中引入的新模板语法的有效方法

现在让我们回到您的问题:

*ngIf我们应该用替换所有实例吗@if

我建议等待几个月,让 Angular 团队正式将此功能指定为稳定。一旦确认,您可以确保无需返工,尤其是当您正在从事大型项目时。

*ngIfAngular 会在未来的版本中完全放弃吗?

虽然 Angular 团队还没有正式稳定下来control_flow,但最终的答案仍然不确定。然而,就我个人而言,我会说不。即使他们将旧语法标记为已弃用,它仍然应该可用,因为采用这种格式的应用程序很流行。此外,无需担心从旧语法迁移到新语法,因为您可以通过运行以下命令轻松完成它。

ng g @angular/core:control-flow
Run Code Online (Sandbox Code Playgroud)

旁注:通过使用,@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>
Run Code Online (Sandbox Code Playgroud)

使用内置 if 语句,此条件将如下所示:

@if (loggedIn) {
  The user is logged in
} @else {
  The user is not logged in
} 
Run Code Online (Sandbox Code Playgroud)