首页 文章

Ionic3 / Angular Error:必须为表单控件提供一个名称为的值:'jobStatus'

提问于
浏览
5

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

<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>

在Typescript中我已经指定了一个值,但是我无法通过这个错误 .

Error: Must supply a value for form control with name: '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;
}

我也有提交的按钮处理程序:

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)

因为它在调用堆栈中显示了ionViewWillLoad,所以错误必须是AFAIK部分中的内容!

3 回答

  • 0

    对...我有一个以前只有一个表单控件的表单,叫做'comment' .

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

    我需要从这样的东西修改它:

    this.modalFG.setValue({'comment': data.comment});
      this.modalFG.setValue({'jobStatus': 0});
    

    至:

    this.modalFG.controls['jobStatus'].setValue(0);
      this.modalFG.controls['comment'].setValue(data.comment);
    

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

    然后一切都落到了位置,关于没有提供表格字段的误导消息消失了 .

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

  • 3

    这里

    private jobStatus:number;
    

    jobStatus值为' undefined ' .

    设置一个值:

    private jobStatus:number = 0;
    

    使它工作 .

  • 0

    我的问题是我不是 providing all form controll values . 例如:

    <div formGroupName="form">
        <input formControlName="first">
        <input formControlName="second">
    </div>
    

    在这种情况下,如果您尝试使用方法 setValue 并且不提供所有controll值,如下所示:

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

    它会抛出一个错误 .

    解决方案

    使用 setValue 并为所有表单控件提供值:

    this.form.setValue({ first: "", second: "" });
    

    或者,如果您确实打算设置部分值,请使用 patchValue 方法:

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

相关问题