Angular 2.以数据驱动的形式设置ControlGroup的值

时间:2016-04-23 07:46:13

标签: forms data-binding angular data-driven

假设我有这个模型:

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;

获得以下错误: 无法设置#< 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]);
    }
}

1 个答案:

答案 0 :(得分:1)

this.builder.group(...)返回的 setValue() { let value = {id: 'xxx', name: 'yyy'}; Object.keys(value).forEach((k) => { this.form.controls[k].updateValue(value[k]); }); } 不支持设置值。要设置值,您必须在每个控件上单独设置它,如:

execute

Plunker example