绑定地图<string,array <object =“”>&gt;形成

时间:2017-09-02 22:50:43

标签: angular angular2-template angular2-forms

我一直在尝试将以下对象绑定到我的表单,但无济于事......我的代码如下:

    export class User {
        public Name: string;
        public Surname: string;
        public Addresses: Map<string, Array<Location>>;
   .
   .
   .
   }

请注意地址,其中键是国家/地区,值是位置对象数组...

现在在我的组件中我有如下内容,在从数据库加载数据后,调用更新表单执行:

    this.userForm= this.fb.group({
                Name: ['', Validators.required],
                Surname: ['', Validators.required],
                Addresses: [{}],
    .
    .
    .
    });

UpdateForm:

updateForm() {
        this.userForm.patchValue({
            Name: this.user.Name,
            Surname: this.user.Surname,
            Addresses: this.user.Addresses
        });

最后我的html:

<form [formGroup]="userForm" (ngSubmit)="submit()" novalidate>
    <div class="panel-body" >                                                                                                      
        <div class="col-lg-4">
            <label>Code:</label>
                <div class="form-group input-group">
                    <input type="text" class="form-control" formControlName="Addresses['UK'].Code">
                </div>
        </div>
.
.
.

我的问题是我无法读取指定索引(UK)(或任何其他键)的数据。我也尝试过Addresses.get('UK')...和Addresses.value ['UK'] .....但没有成功......还尝试使用ngModel,但又失败了。我的怀疑在于补丁调用,我认为我没有正确设置表单控件。 P. S.来自db的用户数据是正确的,因此问题特别在于“绑定”部分。

编辑: 另外,如果我在patchValue()之后立即执行断点,则userForm地址似乎填充 (来自调试器)

this.userForm.get('Addresses').value

    UK:
        Code: 123
        EXT: a123
        .
        .
        .

我对db GetUser()的回复是:

"Addresses": {
        "CountryCode": {
            "Code": 123,
            "Ext": "a123",
            .
            .
            .

        },

提前致谢

1 个答案:

答案 0 :(得分:0)

您必须在formGroup中定义控件名称,例如地址和您必须提供的相同控件,就像我在下面所做的那样构建元素

<input type="text" class="form-control" formControlName="Addresses">

您必须以明确的方式在此处修补国家/地区代码值

  this.userForm.patchValue({
        'Addresses': this.user.Addresses['UK'].Code
    });