【问题标题】:ngIf not triggering on update of [(ngModel)] variablengIf 不会在更新 [(ngModel)] 变量时触发
【发布时间】:2020-01-06 20:47:09
【问题描述】:

我有一个带有选项的选择。该选择有一个[(ngModel)] 指令将选定的值保存到“rightFieldTypeId”中。然后,我有想要根据“rightFieldTypeId”的值显示的元素。当我选择不同的选项(即 1、2 或 3)时,rightFieldTypeId {{ rightFieldTypeId }} 的字符串插值会显示正确的值。但是,我基于 *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>

关于如何根据来自[(ngModel)] 的当前值使用*ngIf 指令实现显示不同元素的任何见解

【问题讨论】:

    标签: angular angular-forms


    【解决方案1】:

    HTML option 值是 string 并且与严格比较 (===) 进行比较不会强制类型,因此 2 === '2' 将是 false

    有几种方法可以使用它:

    1. 使用双重相等比较 - ==;
    2. 使用+ 从字符串*ngIf="+rightFieldTypeId === 2" 生成一个整数,但是如果不能将rightFieldTypeId 强制转换为整数,您可能会遇到运行时错误;
    3. 只需与字符串比较,因为rightFieldTypeId 将始终是字符串*ngIf="rightFieldTypeId === '2'"

    【讨论】:

    • 是的,改为比较字符串 === '2' 就可以了。有点困惑,因为我在打字稿中很难将option.idrightFieldTypeId 都输入为数字。好消息要知道,谢谢。
    • 对于未来的任何人,我发现stackoverflow.com/questions/37921596/… 建议将 标记上的 [value] 指令更改为 [ngValue] 以发出正确的数据类型,而不是寻找解决方法需要发出非字符串类型
    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 2020-10-18
    • 2017-10-26
    • 1970-01-01
    • 2016-03-07
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多