Angular Ionic3/角度错误:必须为表单控件提供一个名为';工作状态';

Angular Ionic3/角度错误:必须为表单控件提供一个名为';工作状态';,angular,typescript,ionic3,angular-reactive-forms,ion-select,Angular,Typescript,Ionic3,Angular Reactive Forms,Ion Select,我有一个模式表单,模板标记中有以下代码 <form [formGroup]="modalFG"> ... <ion-item *ngIf="isChangeStatus()"> <ion-select formControlName="jobStatus" (ionChange)="jobStatusChangeHandler($event)"> <ion-option valu

我有一个模式表单,模板标记中有以下代码

  <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>
我还有按钮处理程序用于提交:

this.exitData.jobStatus = this.modalFG.get('jobStatus').value;
this.view.dismiss(this.exitData);
这是完整的错误消息:

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)
错误:必须为名为“jobStatus”的表单控件提供一个值。
在http://localhost:8100/build/vendor.js:22102:23
在http://localhost:8100/build/vendor.js:22026:66
在Array.forEach()处
在FormGroup.\u forEachChild(http://localhost:8100/build/vendor.js:22026:36)
在FormGroup.\u检查所有值是否存在(http://localhost:8100/build/vendor.js:22100:14)
在FormGroup.setValue(http://localhost:8100/build/vendor.js:21907:14)
在ModalPage.webpackJsonp.124.ModalPage.ionViewWillLoad(http://localhost:8100/build/main.js:648:22)
在ModalImpl.ViewController上。\u生命周期(http://localhost:8100/build/vendor.js:17471:33)
在ModalImpl.ViewController上。\u将加载(http://localhost:8100/build/vendor.js:17331:14)
在OverlyPortal.NavControllerBase.\u将加载(http://localhost:8100/build/vendor.js:44112:18)
因为它说ionViewWillLoad将在调用堆栈中加载,所以错误一定是该部分中的某个内容

这里

private jobStatus:number;
作业状态值为“
未定义”

设置一个值:

private jobStatus:number = 0;
让它工作。

对。。。 我有一个表单,过去只有一个表单控件,叫做“comment”

当我添加第二个条件表单元素时,您需要对setValue使用更改的语法

我需要这样修改它:

  this.modalFG.setValue({'comment': data.comment});
  this.modalFG.setValue({'jobStatus': 0});
this.form.setValue({ second: "" });
致:

因为我现在在表单上有两个字段

然后一切都准备就绪,关于没有提供表单字段的误导信息消失了


我讨厌Angular的语法,当你从1变为n时,改变它的功能行为

我的问题是我没有提供所有表单控件值。例如:

<div formGroupName="form">
    <input formControlName="first">
    <input formControlName="second">
</div>
它将抛出一个错误

解决方案 使用
setValue
并为所有表单控件提供值:

this.form.setValue({ first: "", second: "" });
或者,如果确实要设置部分值,请使用
patchValue
方法:

this.form.patchValue({ second: "" });

您也可以使用patchValue单独设置一个或多个输入:

this.form.patchValue({ first: "whatever" });

如果必须在表单组中只设置一个ctrl值,则应使用

this.formGroup.patchValue({})

如果必须设置窗体组中的所有ctrl值,则应使用


this.formGroup.setValue({})

我实际上已经尝试了该代码,甚至没有将jobStatus作为类属性,并且在fb.group语句和set/get中使用了类似于0的文本。所以我不认为这能解决问题。已尝试删除*ngIf条件,使离子选项上的值引用作品。。。似乎没有什么可以阻止消息必须为名为“jobStatus”的表单控件提供值。不一定,您应该只能够执行以下操作:this.modalFG.setValue({'comment':data.comment,'jobStatus':0});嗨,亚瑟·席尔瓦。下次我做离子工作的时候一定会看看这个。谢谢
this.form.patchValue({ second: "" });
this.form.patchValue({ first: "whatever" });