HTML 在将 ngIf 与变量一起使用时仍然包含在内

HTML is still included when using ngIf with variable

我有以下 Angular 组件:

export class HeaderMainComponent {
  @Input() showFullMenu: boolean = false;
}

然后在 HTMl 我有:

<p>{{showFullMenu}}</p>

<nav *ngIf="showFullMenu">
  <li>Link 1</li>
  <li>Link 2</li>
</nav>

变量 showFullMenu 呈现为 false 但导航仍然显示。

我使用的模板如下:

<header-main showFullMenu="false"></header-main>

我错过了什么?

如果您设置默认值并期望它为 false,那么为什么在这里需要 @Input,删除 @Input,其余的应该可以正常工作。

如果您仍然需要@Input,请确保您使用的是=== 'false'

对于最近的编辑,您应该将@input 值作为

<header-main [showFullMenu]="false"></header-main>

在 HTML 中,任何非空属性的计算结果为真。所以这个 showFullMenu="false" 将属性设置为字符串 "false",这将导致布尔变量被评估为 true.

要将其设置为 false,您有两个选择:

  • 将 HTML 属性设置为空字符串或完全省略该属性
  • 使用 Angular 语法 [showFullMenu]="false"。这会将 "false" 解析为一个表达式,该表达式将导致布尔值 false.