javascript - 响应式(Reactive)表单验证将选择输入框的默认 'select' 值视为有效

标签 javascript angular angular2-forms

当没有选择任何值时,我一直在努力验证带有默认“选择”选项的响应式(Reactive)表单到我的选择输入框。如果表单中存在值,那么我需要选择相应的值。

我使用响应式(Reactive)形式,下面是我的代码实现:

<select class="form-control" formControlName="environment" >
    <option disabled [value]="null">-- Select --</option>
    <option *ngFor="let ami of envs" [value]="ami.amiid">
        {{ami.name}}
    </option>
</select>
this.onlineTestForm = this._fb.group({
            .
            .    
            environment: ['', Validators.required],
            .
            .         
        });

//value is present in the model
(<FormControl>this.onlineTestForm.controls['environment'])
           .setValue(this.model.environment, { onlySelf: true });

//value is not present in model
(<FormControl>this.onlineTestForm.controls['environment'])
           .setValue('null', { onlySelf: true });

有没有更好的方法来实现上述目标?

最佳答案

您的问题在这里:

(<FormControl>this.onlineTestForm.controls['environment'])
       .setValue('null', { onlySelf: true });

您正在设置字符串'null'而不是null。字符串'null'当然是一个有效值。

此外,您还可以将完整的对象设置为表单控件的值(如果存在),即使 environment 只需要 id,至少是您在模板中指定的内容:

[value]="ami.amiid"
<小时/>

我在这里看到两个选项可以“改进”您的代码。这些取决于 this.model 是否异步获取值。如果您知道初始化时 this.model 的值,则可以简单地执行以下操作:

environment: [this.model.environment || null, 
              Validators.required]

这里一定要记得将model初始化为空对象,这样在model<中没有值的情况下才不会抛出undefined错误

<小时/>

如果model值是异步设置的,则在获取该值后使用setValue来设置该值:

this.onlineTestForm.controls.environment.setValue(...)

关于javascript - 响应式(Reactive)表单验证将选择输入框的默认 'select' 值视为有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45381331/

相关文章:

javascript - 处理纳秒时间戳字符串

javascript - Shopware 管理模块在管理后未显示 :build

javascript - 为什么我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件?

javascript - 将初始值设置为 Angular 表单组以进行测试

angular2-forms - Angular2 Forms 禁用具有数据绑定(bind)值的组件中的控件

javascript - CKEditor 5 缺少可用的工具栏项目

node.js - Angular - 如何创建加载屏幕 'like gmail'

angular - RxJS forkJoin 不发出值

angular - 以 Angular 提交时显示表单验证错误消息

angular - 在 Angular 2+ 中对 FormArray 对象进行排序的理想方法是什么?