Angular 更新[(ngModel)]变量时未触发ngIf

Angular 更新[(ngModel)]变量时未触发ngIf,angular,angular-forms,Angular,Angular Forms,我有一个选择选项。select有一个[(ngModel)]指令,将所选值保存到“rightFieldTypeId”中。然后,我会根据“rightFieldTypeId”的值显示一些元素。rightFieldTypeId的字符串插值{rightFieldTypeId}会在我选择不同选项(即1、2或3)时显示正确的值。然而,基于*ngIf指令的我的元素似乎从未评估/更改 <div class="d-flex w-50"> <select class="form-contro

我有一个选择选项。select有一个
[(ngModel)]
指令,将所选值保存到“rightFieldTypeId”中。然后,我会根据“rightFieldTypeId”的值显示一些元素。rightFieldTypeId的字符串插值
{rightFieldTypeId}
会在我选择不同选项(即1、2或3)时显示正确的值。然而,基于
*ngIf
指令的我的元素似乎从未评估/更改

<div class="d-flex w-50">
    <select class="form-control w-25 mr-4" [(ngModel)]="rightFieldTypeId">
        <option *ngFor="let option of fieldTypeOptions" [value]="option.id">
            {{ option.name }}
        </option>
    </select>
    {{ rightFieldTypeId }}
    <span *ngIf="rightFieldTypeId === 2">This is Text</span>
    <edit-spec-wizard-operations-builder *ngIf="rightFieldTypeId === 3"></edit-spec-wizard-operations-builder>
</div>

{{option.name}
{{rightFieldTypeId}}
这是文本

任何关于如何基于
[(ngModel)]
HTML
选项的当前值,使用
*ngIf
指令显示不同元素的见解都是
字符串,与严格比较(
==
)进行比较不会强制类型,因此
2==“2”
将是
false

因此,有两种方法可以解决这个问题:

  • 使用双相等比较-
    ==
  • 使用
    +
    从字符串
    *ngIf=“+rightFieldTypeId==2”
    生成一个整数,但是如果
    rightFieldTypeId
    无法强制为整数,则可能会出现运行时错误
  • 只需与字符串进行比较,因为
    righfieldtypeid
    将始终是字符串
    *ngIf=“righfieldtypeid=='2'

  • HTML
    选项
    值是一个
    字符串
    ,与严格比较(
    ==
    )进行比较不会强制类型,因此
    2==='2'
    将为
    false

    因此,有两种方法可以解决这个问题:

  • 使用双相等比较-
    ==
  • 使用
    +
    从字符串
    *ngIf=“+rightFieldTypeId==2”
    生成一个整数,但是如果
    rightFieldTypeId
    无法强制为整数,则可能会出现运行时错误
  • 只需与字符串进行比较,因为
    righfieldtypeid
    将始终是字符串
    *ngIf=“righfieldtypeid=='2'

  • 是的,更改为比较字符串
    ==“2”
    就成功了。我有点困惑,因为我已经将
    option.id
    rightFieldTypeId
    硬输入为typescript中的数字。很高兴知道,谢谢。对于未来的任何人,我发现这建议将标记上的[value]指令更改为[ngValue]以发出正确的数据类型,而不是在需要发出非字符串类型时找到解决方法。是的,更改为与字符串进行比较
    ==='2'
    成功了。我有点困惑,因为我已经将
    option.id
    rightFieldTypeId
    硬输入为typescript中的数字。很高兴知道,谢谢。对于将来的任何人,我发现这建议将标记上的[value]指令更改为[ngValue],以发出正确的数据类型,而不是在需要发出非字符串类型时找到解决方法