【问题标题】:Validating pre populated input field angular验证预填充的输入字段角度
【发布时间】:2018-04-26 00:40:37
【问题描述】:

我有以下代码:

<h1>New Book</h1>
<form  #f="ngForm" (ngSubmit)="submit(f)">
   <div class="form-group">
        <label for="group">Group</label>
        <select id="group" class="form-control" (change)="onGroupChange()" [(ngModel)]="groupId" name="groupId">
            <option value=""></option>
            <option *ngFor="let g of groups" value="{{g.id}}">{{g.name}}</option>
        </select>
    </div>
    <div class="form-group">
        <label for="registrationNumber">Registration Number</label>
        <input required ngModel name="registrationNumber" #registrationNumber="ngModel" id="registrationNumber" class="form-control" value={{regId}}/>
        <div class="alert alert-danger" *ngIf="!registrationNumber && !registrationNumber.valid">Registration Number  is required.</div>
    </div>
 <button class="btn btn-primary" [disabled]="!f.valid">Save</button>
</form>

如您所见,如果表单的其中一个值无效,则该按钮将被禁用。问题是当您在组下拉列表中选择一个组时会填充注册号。即使在填充了注册号字段后,保存按钮仍然被禁用。我应该在注册号的 *ngIf 中写入什么样的验证来告诉 Angular 如果该字段具有值,则将该字段标记为 ok。

换句话说,下面的ngIf应该是什么?

<div class="alert alert-danger" *ngIf=" ? "**>Registration Number  is required.</div>
    </div>

【问题讨论】:

    标签: angular validation client-side-validation


    【解决方案1】:

    您需要使用ngModel 设置值,然后验证应该按预期工作。

    <input required [ngModel]="regId" name="registrationNumber" #registrationNumber="ngModel" id="registrationNumber" class="form-control"/>
    

    此外,您可以使用空合并运算符简化您的 ngIf

    <div class="alert alert-danger" *ngIf="!registrationNumber?.valid">Registration Number  is required.</div> 
    

    【讨论】:

    • 是的。我可以知道添加 [ngModel] 如何使验证工作吗?我的意思是,这里有什么联系?
    • Angular 表单使用模型值来确定有效性。当您绑定到 html 值属性时,ngModel 不知道输入有一个值。此外,[ngModel] 语法只是一个输入值,因此您告诉它最初使用该值,但是当用户更改它时它将被覆盖并且不会保持同步。
    • 我对你有点了解。你能给我指一个可以详细解释这一点的教程吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多