1

私がこのモデルを持っているとしましょう:

export class MyModel {
    constructor(
        public id: number,
        public name: string
    ) {}
}

そしてこのControlGroup:

export class MyComponent {
    form: ControlGroup;
    model: MyModel;

    constructor(builder: FormBuilder) {
        this.form = this.builder({
            'id' : [''],
            'name' : ['']
        })
    }
}

フォームのデータを取得するには、単純にそれを行うことができます (フィールド名が一致する場合):

this.model = this.form.value;

しかし、同じ方法でフォームの値を設定するにはどうすればよいでしょうか?

something like: this.form.value = model;

次のエラーが発生しました: getter しかない #<AbstractControl> のプロパティ値を設定できません

ありがとうございました!

UPD:以下のGünterZöchbauerの提案に基づいて、そのヘルパーメソッドになりました:

setFormValues(form: ControlGroup, model: any) {

    for(var key in model) {
        var ctrl = (<Control>form.controls[key]);
        if ( ctrl != undefined )
            ctrl.updateValue(model[key]);
    }
}
4

1 に答える 1

1

ControlGroupから返されたthis.builder.group(...)は、値の設定をサポートしていません。値を設定するには、次のように各コントロールで個別に設定する必要があります。

  setValue() {
    let value = {id: 'xxx', name: 'yyy'};
    Object.keys(value).forEach((k) => {
      this.form.controls[k].updateValue(value[k]);
    });
  }

プランカーの例

于 2016-04-23T09:01:49.547 に答える