JGF*_*FMK 11 typescript ionic3 angular angular-reactive-forms ion-select
我有一个模板表单,模板标记中包含以下代码
<form [formGroup]="modalFG">
...
<ion-item *ngIf="isChangeStatus()">
<ion-select formControlName="jobStatus"
(ionChange)="jobStatusChangeHandler($event)">
<ion-option value=4>Success</ion-option>
<ion-option value=5>Failure</ion-option>
<ion-option value=6>Terminated</ion-option>
<ion-option value=8>Inactive</ion-option>
</ion-select>
</ion-item>
</form>
Run Code Online (Sandbox Code Playgroud)
在Typescript中我已经指定了一个值,但是我无法通过这个错误.
错误:必须为名称为'jobStatus'的表单控件提供值.
有人能告诉我我做错了什么吗?
...
private modalFG:FormGroup;
private jobStatus:number;
constructor(
private navParams:NavParams,
private view:ViewController,
private fb: FormBuilder,
...
) {
this.changeStatus = false;
this.modalFG = fb.group({
comment: ['', Validators.required],
jobStatus: this.jobStatus
});
}
private ionViewWillLoad():void {
const data = this.navParams.get('data');
this.modalFG.setValue({'jobStatus': this.jobStatus});
}
private jobStatusChangeHandler(ev:any) {
console.log(ev);
}
private isChangeStatus():boolean {
return this.changeStatus;
}
Run Code Online (Sandbox Code Playgroud)
我也有提交的按钮处理程序:
this.exitData.jobStatus = this.modalFG.get('jobStatus').value;
this.view.dismiss(this.exitData);
Run Code Online (Sandbox Code Playgroud)
这是完整的错误消息:
Error: Must supply a value for form control with name: 'jobStatus'.
at http://localhost:8100/build/vendor.js:22102:23
at http://localhost:8100/build/vendor.js:22026:66
at Array.forEach (<anonymous>)
at FormGroup._forEachChild (http://localhost:8100/build/vendor.js:22026:36)
at FormGroup._checkAllValuesPresent (http://localhost:8100/build/vendor.js:22100:14)
at FormGroup.setValue (http://localhost:8100/build/vendor.js:21907:14)
at ModalPage.webpackJsonp.124.ModalPage.ionViewWillLoad (http://localhost:8100/build/main.js:648:22)
at ModalImpl.ViewController._lifecycle (http://localhost:8100/build/vendor.js:17471:33)
at ModalImpl.ViewController._willLoad (http://localhost:8100/build/vendor.js:17331:14)
at OverlayPortal.NavControllerBase._willLoad (http://localhost:8100/build/vendor.js:44112:18)
Run Code Online (Sandbox Code Playgroud)
因为它在调用堆栈中显示了ionViewWillLoad,所以错误必须是AFAIK部分中的内容!
Art*_*lva 21
我的问题是我没有提供所有表单控制值.例如:
<div formGroupName="form">
<input formControlName="first">
<input formControlName="second">
</div>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果您尝试使用方法setValue
并且不提供所有controll值,如下所示:
this.form.setValue({ second: "" });
Run Code Online (Sandbox Code Playgroud)
它会抛出一个错误.
使用setValue
并为所有表单控件提供值:
this.form.setValue({ first: "", second: "" });
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实打算设置部分值,请使用patchValue
方法:
this.form.patchValue({ second: "" });
Run Code Online (Sandbox Code Playgroud)
对...我的表单过去只有一个表单控件,称为"注释".
当我添加第二个条件表单元素时,您需要使用setValue更改的语法...
我需要从这样的东西修改它:
this.modalFG.setValue({'comment': data.comment});
this.modalFG.setValue({'jobStatus': 0});
Run Code Online (Sandbox Code Playgroud)
至:
this.modalFG.controls['jobStatus'].setValue(0);
this.modalFG.controls['comment'].setValue(data.comment);
Run Code Online (Sandbox Code Playgroud)
因为我现在在表格上有两个字段......
然后一切都落到了位置,关于没有提供表格字段的误导消息消失了.
我讨厌Angular的语法,当你从1变为n值时改变它的功能行为!
归档时间: |
|
查看次数: |
23245 次 |
最近记录: |